<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta name="generator" content=
  "HTML Tidy for Linux/x86 (vers 25 March 2009), see www.w3.org" />

  <title>GO-SUSI Operator's Manual</title>
  <style type="text/css">
/*<![CDATA[*/
  ol{margin:0;padding:0}.c1{height:11pt;direction:ltr;margin-left:36pt}.c12{list-style-type:circle;margin:0;padding:0}.c19{list-style-type:disc;margin:0;padding:0}.c23{max-width:523.3pt;background-color:#ffffff;padding:36pt 36pt 36pt 36pt}.c9{color:inherit;text-decoration:inherit}.c0{font-family:"Courier New";font-weight:bold}.c11{color:#1155cc;text-decoration:underline}.c18{line-height:1.0}.c17{vertical-align:sub}.c10{margin-left:108pt}.c22{margin-left:180pt}.c13{margin-left:54pt}.c2{font-family:"Courier New"}.c15{padding-left:0pt}.c7{font-style:italic}.c25{font-size:14pt}.c24{height:14pt}.c20{height:12pt}.c3{direction:ltr}.c16{margin-left:18pt}.c6{margin-left:36pt}.c14{margin-left:144pt}.c21{text-align:center}.c4{font-weight:bold}.c26{height:18pt}.c8{height:11pt}.c5{margin-left:72pt}.title{padding-top:24pt;line-height:1.15;text-align:left;color:#000000;font-size:30pt;font-family:"Arial";font-weight:bold;padding-bottom:6pt}.subtitle{padding-top:18pt;line-height:1.15;text-align:left;color:#666666;font-style:italic;font-size:24pt;font-family:"Georgia";padding-bottom:4pt}li{color:#000000;font-size:11pt;font-family:"Arial"}p{color:#000000;font-size:11pt;margin:0;font-family:"Arial"}h1{padding-top:24pt;line-height:1.15;text-align:left;color:#000000;font-size:18pt;font-family:"Arial";font-weight:bold;padding-bottom:6pt}h2{padding-top:18pt;line-height:1.15;text-align:left;color:#000000;font-size:14pt;font-family:"Arial";font-weight:bold;padding-bottom:4pt}h3{padding-top:14pt;line-height:1.15;text-align:left;color:#666666;font-size:12pt;font-family:"Arial";font-weight:bold;padding-bottom:4pt}h4{padding-top:12pt;line-height:1.15;text-align:left;color:#666666;font-style:italic;font-size:11pt;font-family:"Arial";padding-bottom:2pt}h5{padding-top:11pt;line-height:1.15;text-align:left;color:#666666;font-size:10pt;font-family:"Arial";font-weight:bold;padding-bottom:2pt}h6{padding-top:10pt;line-height:1.15;text-align:left;color:#666666;font-style:italic;font-size:10pt;font-family:"Arial";padding-bottom:2pt}
  /*]]>*/
  </style>
</head>

<body class="c23">
  <p class="c3 title"><a name="h.vqantooav6cy" id=
  "h.vqantooav6cy"></a><span>GO-SUSI Operator&#8217;s
  Manual</span></p>

  <p class="c3 c16"><span class="c11"><a class="c9" href=
  "#h.qpuowmrty7yb">Overview</a></span></p>

  <p class="c3 c16"><span class="c11"><a class="c9" href=
  "#h.u0s09hxn0kr0">Invocation</a></span></p>

  <p class="c3 c6"><span class="c11"><a class="c9" href=
  "#h.noyiy3hxsuzj">Background operation</a></span></p>

  <p class="c3 c16"><span class="c11"><a class="c9" href=
  "#h.kargb81n8lw4">Configuration</a></span></p>

  <p class="c3 c6"><span class="c11"><a class="c9" href=
  "#h.vv09slb55j">DNS configuration</a></span></p>

  <p class="c3 c6"><span class="c11"><a class="c9" href=
  "#h.bqrhjen52ghs">TCP Keep-Alive</a></span></p>

  <p class="c3 c6"><span class="c11"><a class="c9" href=
  "#h.rhxe5y7vanz9">Configuration file
  /etc/gosa-si/server.conf</a></span></p>

  <p class="c3 c16"><span class="c11"><a class="c9" href=
  "#h.w4zq54nisjsx">Hooks</a></span></p>

  <p class="c3 c6"><span class="c11"><a class="c9" href=
  "#h.uflhopltjofk">kernel-list-hook</a></span></p>

  <p class="c3 c6"><span class="c11"><a class="c9" href=
  "#h.lcg0co1fq2xh">package-list-hook</a></span></p>

  <p class="c3 c6"><span class="c11"><a class="c9" href=
  "#h.jl9h7nlx12bl">user-msg-hook</a></span></p>

  <p class="c3 c6"><span class="c11"><a class="c9" href=
  "#h.3eksnwm3fz5s">pxelinux-cfg-hook</a></span></p>

  <p class="c3 c6"><span class="c11"><a class="c9" href=
  "#h.tmddyclmp68v">new-config-hook</a></span></p>

  <p class="c3 c16"><span class="c11"><a class="c9" href=
  "#h.hzdxkgexaqdo">Interfacing with go-susi</a></span></p>

  <p class="c3 c6"><span class="c11"><a class="c9" href=
  "#h.36xshbk95lq">TCP connection to [server]/port</a></span></p>

  <p class="c3 c6"><span class="c11"><a class="c9" href=
  "#h.99ysh1gd1xn3">TCP connection to [faimon]/port</a></span></p>

  <p class="c3 c6"><span class="c11"><a class="c9" href=
  "#h.ue6pv2ufxyrz">TFTP server on [tftp]/port (UDP)</a></span></p>

  <p class="c3 c6"><span class="c11"><a class="c9" href=
  "#h.l0vggs5nqxsf">Signals</a></span></p>

  <p class="c3 c16"><span class="c11"><a class="c9" href=
  "#h.3dolgdo847j1">/var/lib/go-susi database</a></span></p>

  <p class="c3 c6"><span class="c11"><a class="c9" href=
  "#h.4alj9q9r8lq3">jobdb.xml</a></span></p>

  <p class="c3 c6"><span class="c11"><a class="c9" href=
  "#h.50wdi3uufl9n">serverdb.xml</a></span></p>

  <p class="c3 c6"><span class="c11"><a class="c9" href=
  "#h.q5bbvyapnxmg">clientdb.xml</a></span></p>

  <p class="c3 c16"><span class="c11"><a class="c9" href=
  "#h.ed4sng37wuoy">Messages</a></span></p>

  <p class="c3 c6"><span class="c11"><a class="c9" href=
  "#h.cd7ky6j7y55t">Message transmission protocol</a></span></p>

  <p class="c3 c6"><span class="c11"><a class="c9" href=
  "#h.q0xsu7rifamf">Message structure and common
  elements</a></span></p>

  <p class="c3 c6"><span class="c11"><a class="c9" href=
  "#h.v3ibvnwfeq4q">Reply structure</a></span></p>

  <p class="c3 c6"><span class="c11"><a class="c9" href=
  "#h.sh9p65qhzwco">Error replies</a></span></p>

  <p class="c3 c6"><span class="c11"><a class="c9" href=
  "#h.1tre848fj84d">Encryption keys</a></span></p>

  <p class="c3 c6"><span class="c11"><a class="c9" href=
  "#h.o2gkp1mdgfab">Jobs</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.lytqmekfw49">job_trigger_action_*</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.18ajv1iep81s">gosa_trigger_action_*</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.rfc7061kx2wn">job_trigger_activate_new</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.b1cynga2n4f7">gosa_set_activated_for_installation</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.vc4zvgp0v9ry">job_set_activated_for_installation</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.y5al68gnxmpw">job_send_user_msg</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.wj0yc4cuajj2">gosa_query_jobdb</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.am3mtnji9zso">gosa_delete_jobdb_entry</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.aa2wm0ojc2ux">gosa_update_status_jobdb_entry</a></span></p>

  <p class="c3 c6"><span class="c11"><a class="c9" href=
  "#h.n1abt4rakrkh">Server - Server</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.ggvkhagjviu">new_server</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.t6s5fv3aa5zt">confirm_new_server</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.d21gga45wxtz">foreign_job_updates</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.4o43ycaft42x">new_foreign_client</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.z3ec199pha6w">trigger_wake</a></span></p>

  <p class="c3 c6"><span class="c11"><a class="c9" href=
  "#h.w73b9qoqu5cg">Client - Server</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.w909y3vom7bh">here_i_am</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.uw29iuabpm6q">new_key</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.w5skplmpyja8">registered</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.l3p6rg78vgh1">new_ldap_config</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.gprzmis7xdu9">new_ntp_config</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.hoqs75a5zaxq">detect_hardware</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.ylkn6o4e9qjp">detected_hardware</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.ylgwskj1nfmx">trigger_action_*</a></span></p>

  <p class="c3 c6"><span class="c11"><a class="c9" href=
  "#h.g0n6u5xsrhzi">Installation and Softupdate</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.finq4l4vjm98">set_activated_for_installation</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.ntyp12z772rh">CLMSG_PROGRESS</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.n5rmujuoqo6x">CLMSG_GOTOACTIVATION</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.95smg2f0t4s6">CLMSG_save_fai_log</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.g7r8biivaqpb">CLMSG_&lt;FAI MONITOR EVENT&gt;</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.69oiwe17guu6">CLMSG_TASKBEGIN / CLMSG_TASKERROR /
  CLMSG_TASKEND</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.z4re866t15e6">CLMSG_check</a></span></p>

  <p class="c3 c6"><span class="c11"><a class="c9" href=
  "#h.p40mxwr1vmxg">Query various information</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.vnc6qrea3m0g">gosa_query_fai_server</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.1c4dc8mqlioo">gosa_query_fai_release</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.k0ukjz6z8za5">gosa_query_packages_list</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.3ws61p27du89">gosa_get_available_kernel</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.n4mrnc8f9h1c">gosa_show_log_by_mac</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.mgjs4al2n8iv">gosa_show_log_files_by_date_and_mac</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.87z05qg5bmin">gosa_get_log_file_by_date_and_mac</a></span></p>

  <p class="c3 c6"><span class="c11"><a class="c9" href=
  "#h.mehsqejmttjq">Miscellaneous</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.sp869tnshz6d">panic</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.g4sj4mac6l55">sistats</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.4syp8tvmprfx">gosa_trigger_reload_ldap_config</a></span></p>

  <p class="c3 c6"><span class="c11"><a class="c9" href=
  "#h.fn2pc4k1bcbp">Deprecated</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.itw5nv66zjdc">CLMSG_CURRENTLY_LOGGED_IN</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.p7etfjet6df2">CLMSG_LOGIN</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.o8zsmxn55w4">CLMSG_LOGOUT</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.1nxkurs4dznc">information_sharing</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.le5ca3ebk6m4">usr_msg</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.tjnsr0p4y1zm">confirm_usr_msg</a></span></p>

  <p class="c3 c16"><span class="c11"><a class="c9" href=
  "#h.7g7l42ni6zqg">Appendix</a></span></p>

  <p class="c3 c6"><span class="c11"><a class="c9" href=
  "#h.bumhouula4zt">sibridge</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.gieyvwnkib9d">Synopsis</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.uveotml3h6xt">Description</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.n3hj3y4xe5mb">Options</a></span></p>

  <p class="c3 c6"><span class="c11"><a class="c9" href=
  "#h.rg8r0lng3t2i">gosa-si-server</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.yoxr0fkye4xl">Synopsis</a></span></p>

  <p class="c3 c13"><span class="c11"><a class="c9" href=
  "#h.2c667w8outoi">Description</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.hynknf0noih">Options</a></span></p>

  <p class="c13 c3"><span class="c11"><a class="c9" href=
  "#h.rge71hew64ek">Files</a></span></p>

  <p class="c3 c16"><span class="c11"><a class="c9" href=
  "#h.jjoyi1fwsh2p">License</a></span></p>
  <hr style="page-break-before:always;display:none;" />

  <h1 class="c3 c26"><a name="h.nl56x0kbrp6g" id=
  "h.nl56x0kbrp6g"></a></h1><a href="#" name="id.jes9sqqlstzn" id=
  "id.jes9sqqlstzn"></a>

  <h1 class="c3"><a name="h.qpuowmrty7yb" id=
  "h.qpuowmrty7yb"></a><span>Overview</span></h1><a href="#" name=
  "id.hjmnt8awkh8s" id="id.hjmnt8awkh8s"></a>

  <p class="c3"><span>go-susi is a daemon that performs the
  following functions:</span></p>

  <ol class="c19" start="1">
    <li class="c15 c3 c6"><span>Maintain various databases for
    GOsa. For instance go-susi manages a database of Debian
    packages that GOsa presents to the user for creating package
    lists.</span></li>

    <li class="c15 c3 c6"><span>Send messages to clients on behalf
    of GOsa to trigger some action such as wake-on-lan.</span></li>

    <li class="c15 c3 c6"><span>Maintain a schedule of jobs and
    trigger their execution at the appropriate time.</span></li>

    <li class="c15 c3 c6"><span>Monitor the progress of
    long-running jobs such as installations.</span></li>

    <li class="c15 c3 c6"><span>Communicate the job schedule and
    progress to other servers so that each instance of GOsa can
    query up-to-date data from its respective go-susi
    instance.</span></li>

    <li class="c15 c3 c6"><span>Collect data from clients and make
    it available to GOsa (e.g. installation logs).</span></li>

    <li class="c15 c3 c6"><span>Query an LDAP directory on behalf
    of GOsa.</span></li>

    <li class="c15 c3 c6"><span>Make changes to LDAP data on behalf
    of GOsa or in reaction to other events (such as job
    completion).</span></li>
  </ol>

  <h1 class="c3"><a name="h.u0s09hxn0kr0" id=
  "h.u0s09hxn0kr0"></a><span>Invocation</span></h1>

  <p class="c3"><span>Most of the time you would not invoke go-susi
  directly. The preferred way to invoke go-susi is via the</span>
  <span class=
  "c2">gosa-si-server(1)</span><span>&#160;compatibility launcher
  script.</span></p>

  <p class="c3"><span>When invoked directly,</span> <span>go-susi
  understands the following command line
  arguments:</span></p><a href="#" name="id.7rmu3qjxnnyy" id=
  "id.7rmu3qjxnnyy"></a>

  <p class="c3"><span class="c0">--help</span></p><a href="#" name=
  "id.f852w3yjg198" id="id.f852w3yjg198"></a>

  <p class="c3 c6"><span>print usage and exit.</span></p>

  <p class="c3"><span class="c0">--version</span></p>

  <p class="c3 c6"><span>print version and exit.</span></p>

  <p class="c3"><span class="c0">--stats</span></p>

  <p class="c3 c6"><span>send a running go-susi process an</span>
  <span class="c2">sistats</span><span>&#160;message, print out the
  returned data and exit.</span></p>

  <p class="c3"><span class="c0">-c &lt;file&gt;</span></p>

  <p class="c3 c6"><span>go-susi will read its configuration from
  &lt;file&gt; instead of the default location. If both --test and
  -c are specified, the last switch on the command line will
  determine the config file location.</span></p>

  <p class="c3"><span class="c0">-f</span></p>

  <p class="c3 c6"><span>start with a fresh database. go-susi will
  not load data from</span> <span class=
  "c2">/var/lib/go-susi.</span></p>

  <p class="c3"><span class="c0">-v</span></p>

  <p class="c3 c6"><span>go-susi will log INFO level log messages
  (by default only ERRORs are logged). INFO level messages may aid
  the administrator in debugging problems.</span></p>

  <p class="c3"><span class="c0">-vv</span></p>

  <p class="c3 c6"><span>go-susi will log INFO and DEBUG level log
  messages. DEBUG level messages are useful only for developers and
  may produce so much data that it affects performance. They also
  contain cleartext passwords.</span></p>

  <p class="c3"><span class="c0">--test=&lt;dir&gt;</span></p>

  <ol class="c19" start="1">
    <li class="c15 c3 c5"><span>go-susi will read configuration
    files from &lt;dir&gt; instead of</span> <span class=
    "c2">/etc/gosa-si.</span></li>

    <li class="c15 c3 c5"><span>the default log file will be</span>
    <span class="c2">&lt;dir&gt;/go-susi.log.</span></li>

    <li class="c15 c3 c5"><span>the database files will be stored
    in</span> <span class=
    "c2">&lt;dir&gt;</span><span>&#160;instead of</span>
    <span class="c2">/var/lib/go-susi.</span></li>

    <li class="c15 c3 c5"><span>installation/softupdate logs will
    be stored in</span> <span class=
    "c2">&lt;dir&gt;</span><span>&#160;instead of</span>
    <span class="c2">/var/log/fai.</span></li>
  </ol>

  <h2 class="c3"><a name="h.noyiy3hxsuzj" id=
  "h.noyiy3hxsuzj"></a><span>Background operation</span></h2>

  <p class="c3"><span>go-susi does not put itself into the
  background, does not create a new session and does not ignore
  SIGHUP. Nor does go-susi create a PID file. If you want to do any
  of these things from a shell script (e.g. a classic init script),
  use utilities such as setsid(1), nohup(1) and
  start-stop-daemon(8) in combination with the shell's &amp;
  operator, subshells, exec and variables like $BASHPID (which
  gives the PID of the subshell unlike $$).</span></p>

  <p class="c3"><span>The launcher script</span> <span class=
  "c2">gosa-si-server</span><span>&#160;that comes with go-susi
  demonstrates this.</span></p>
  <hr style="page-break-before:always;display:none;" />

  <h1 class="c3"><a name="h.kargb81n8lw4" id=
  "h.kargb81n8lw4"></a><span>Configuration</span></h1>

  <h2 class="c3"><a name="h.vv09slb55j" id=
  "h.vv09slb55j"></a><span>DNS configuration</span></h2>

  <p class="c3"><span>go-susi will use DNS to locate other go-susi
  and gosa-si instances. When go-susi starts it will contact other
  servers listed in DNS to update its job schedule and announce its
  presence so that the other servers will pass on future
  information to the new go-susi instance. This can be disabled
  via</span> <span class=
  "c2">[ServerPackages]/dns-lookup.</span></p>

  <p class="c3"><span>To list a server in DNS, create an SRV record
  for the service "gosa-si" and protocol "tcp" within the same
  subdomain of the go-susi that should pick it up.</span></p>

  <h2 class="c3"><a name="h.bqrhjen52ghs" id=
  "h.bqrhjen52ghs"></a><span>TCP Keep-Alive</span></h2>

  <p class="c3"><span>In order to keep its job database consistent
  with its peers, go-susi needs to detect when a peer is
  unreachable. Error conditions that close the TCP connection to
  the peer, such as when the peer process crashes or is shut down,
  are always detected reliably. However error conditions at the
  network level, such as a broken network cable, can only be
  detected if TCP keep-alive is properly configured.</span></p>

  <p class="c3"><span>By default the Linux kernel will not send the
  first keep-alive packet until hours after the last data
  transmission. This is too long if you want go-susi to have an
  accurate up-to-date view of peer jobs. The following commands
  configure the kernel to start keep-alive when no data has been
  transmitted for 30s, to wait 10s between keep-alive packets and
  to mark the connection as broken if 5 keep-alive packets remain
  unanswered. This causes broken connections to be detected after
  about 1 &#189; minutes.</span></p>

  <p class="c3 c8"></p>

  <p class="c3 c6"><span class="c2">echo 30
  &gt;/proc/sys/net/ipv4/tcp_keepalive_time</span></p>

  <p class="c3 c6"><span class="c2">echo 10
  &gt;/proc/sys/net/ipv4/tcp_keepalive_intvl</span></p>

  <p class="c3 c6"><span class="c2">echo &#160;5
  &gt;/proc/sys/net/ipv4/tcp_keepalive_probes</span></p><a href="#"
  name="id.ghm1et7cq23q" id="id.ghm1et7cq23q"></a>

  <h2 class="c3"><a name="h.rhxe5y7vanz9" id=
  "h.rhxe5y7vanz9"></a><span>Configuration file
  /etc/gosa-si/server.conf</span></h2>

  <p class="c3"><span>/etc/gosa-si/server.conf configures various
  aspects of go-susi's behaviour. It has the following general
  structure:</span></p>

  <p class="c3 c8"></p><a href="#" name="id.w63fd9fui69z" id=
  "id.w63fd9fui69z"></a>

  <p class="c3 c6"><span class="c2">[section1]</span></p>

  <p class="c3 c6"><span class="c2">param1 = value1</span></p>

  <p class="c3 c6"><span class="c2">param2 = value2</span></p>

  <p class="c3 c6"><span class="c2">...</span></p>

  <p class="c1"></p>

  <p class="c3 c6"><span class="c2">[section2]</span></p>

  <p class="c3 c6"><span class="c2">...</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span>go-susi evaluates the following
  sections/parameters from this file. All other sections/parameters
  are ignored.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c0">[any section]</span></p>

  <p class="c3 c6"><span class="c0">key</span></p>

  <p class="c3 c5"><span>go-susi collects all keys from all
  sections and will use them to decrypt messages.</span></p>

  <p class="c3"><span class="c0">[general]</span></p>

  <p class="c3 c6"><span class="c0">log-file</span></p>

  <p class="c3 c5"><span>The path of go-susi&#8217;s log file.
  Default is</span> <span class=
  "c2">/var/log/go-susi.log.</span></p>

  <p class="c3 c6"><span class="c0">fai-log-dir</span></p>

  <p class="c3 c5"><span>The directory where the subdirectories for
  client log files received via</span> <span class=
  "c2">CLMSG_save_fai_log</span><span>&#160;will be created.
  Default is</span> <span class="c2">/var/log/fai.</span></p>

  <p class="c3 c6"><span class=
  "c0">kernel-list-hook</span></p><a href="#" name=
  "id.3uhjxiaklp5d" id="id.3uhjxiaklp5d"></a>

  <p class="c3 c5"><span>The path of a program that generates a
  list of kernels supported for each release. See the
  section</span> <span class=
  "c0">kernel-list-hook</span><span>&#160;further below. Default
  is</span> <span class=
  "c2">/usr/lib/go-susi/generate_kernel_list.</span></p>

  <p class="c3 c6"><span class="c0">package-list-hook</span></p>

  <p class="c3 c5"><span>The path of a program that generates a
  list of packages included in each release. See the section</span>
  <span class="c0">package-list-hook</span><span>&#160;further
  below. Default is</span> <span class=
  "c2">/usr/lib/go-susi/generate_package_list.</span></p>

  <p class="c3 c6"><span class="c0">user-msg-hook</span></p>

  <p class="c3 c5"><span>The path of a program to handle</span>
  <span class="c2">job_send_user_msg</span><span>&#160;messages.
  See the section</span> <span class=
  "c0">user-msg-hook</span><span>&#160;further below. Default
  is</span> <span class=
  "c2">/usr/lib/go-susi/send_user_msg.</span></p>

  <p class="c3 c6"><span class="c0">pxelinux-cfg-hook</span></p>

  <p class="c3 c5"><span>The path of a program that will be called
  when go-susi's TFTP server is asked for a file that matches
  "</span><span class=
  "c2">pxelinux.cfg/01-&lt;MAC&gt;</span><span>". See the
  section</span> <span class=
  "c0">pxelinux-cfg-hook</span><span>&#160;further below. Default
  is</span> <span class=
  "c2">/usr/lib/go-susi/generate_pxelinux_cfg.</span></p>

  <p class="c3 c6"><span class="c0">new-config-hook</span></p>

  <p class="c3 c5"><span>The path of a program that will be called
  when go-susi receives a message of type</span> <span class=
  "c2">new_foo_config</span><span>&#160;(for all kinds of "foo").
  See the section</span> <span class=
  "c0">new-config-hook</span><span>&#160;further below. Default
  is</span> <span class=
  "c2">/usr/lib/go-susi/update_config_files.</span></p>

  <p class="c3"><span class="c0">[server]</span></p>

  <p class="c3 c6"><span class="c0">port</span></p>

  <p class="c3 c5"><span>The port the server should listen at for
  XML messages. Default is 20081.</span></p>

  <p class="c3 c6"><span class="c0">ldap-uri</span></p>

  <p class="c3 c5"><span>URI for connecting with the LDAP server.
  Default is</span> <span class=
  "c2">ldap://localhost:389.</span></p>

  <p class="c3 c6"><span class="c0">ldap-base</span></p>

  <p class="c3 c5"><span>A DN. LDAP lookups will be restricted to
  the subtree rooted here. Default is</span> <span class=
  "c2">c=de.</span></p>

  <p class="c3 c6"><span class="c0">ldap-admin-dn</span></p>

  <p class="c3 c5"><span>DN of the account to use for write access
  to LDAP. Default is</span> <span class=
  "c2">cn=clientmanager,ou=incoming,c=de</span><span>.</span></p>

  <p class="c3 c6"><span class="c0">ldap-admin-password</span></p>

  <p class="c3 c5"><span>Password of the account to use for LDAP
  write access. Default is</span> <span class=
  "c2">"password".</span></p>

  <p class="c3 c6"><span class="c0">ldap-user-dn</span></p>

  <p class="c3 c5"><span>DN of the account to use for read access
  to LDAP. Default is empty which means anonymous
  access.</span></p>

  <p class="c3 c6"><span class="c0">ldap-user-password</span></p>

  <p class="c3 c5"><span>Password of the account to use for LDAP
  read access. Default is empty.</span></p>

  <p class="c3"><span class="c0">[faimon]</span></p>

  <p class="c3 c6"><span class="c0">port</span></p>

  <p class="c3 c5"><span>The TCP port go-susi will listen on for
  FAI status messages. Default is 4711. Use &#8220;disable&#8221;,
  &#8220;none&#8221; or anything else that is not a valid port to
  disable the functionality.</span></p>

  <p class="c3"><span class="c0">[tftp]</span></p>

  <p class="c3 c6"><span class="c0">port</span></p>

  <p class="c3 c5"><span>The UDP port for go-susi's built-in TFTP
  server. Default is 69. Use &#8220;disable&#8221;,
  &#8220;none&#8221; or anything else that is not a valid port to
  disable the functionality.</span></p>

  <p class="c3 c6"><span class="c0">/file</span></p>

  <p class="c3 c5"><span>Every parameter in the</span> <span class=
  "c2">[tftp]</span><span>&#160;section that starts with a slash
  "/" gives a virtual path that may be requested from the TFTP
  server (without the leading slash). The value on the right side
  of the "=" for such a parameter gives the actual filesystem path
  of the file that should be served when the virtual path is
  requested.</span></p>

  <p class="c3"><span class="c0">[ServerPackages]</span></p>

  <p class="c3 c6"><span class="c0">address</span></p>

  <p class="c3 c5"><span>A list of peer servers (format</span>
  <span class="c7">host:port</span><span>) separated by commas
  and/or whitespace to communicate with in addition to those listed
  in DNS.</span></p>

  <p class="c3 c6"><span class="c0">dns-lookup</span></p>

  <p class="c3 c5"><span>If</span> <span class=
  "c2">false</span><span>, then SRV records from DNS for
  tcp/gosa-si servers will be ignored. Note, however, that if
  another server contacts go-susi of its own accord, go-susi will
  start talking to this peer regardless of</span> <span class=
  "c2">dns-lookup.</span></p>

  <p class="c3 c6"><span class="c0">domains</span></p>

  <p class="c3 c5"><span>When looking up machine names (e.g. for
  wake-on-lan) that are not fully qualified, if DNS can not resolve
  the name, re-attempt with each of the domains from this list
  appended. The list&#8217;s entries may be separated by commas or
  spaces and each entry may or may not start with a dot.</span></p>
  <hr style="page-break-before:always;display:none;" />
  <a href="#" name="id.3yfqzfegrde0" id="id.3yfqzfegrde0"></a>

  <h1 class="c3"><a name="h.w4zq54nisjsx" id=
  "h.w4zq54nisjsx"></a><span>Hooks</span></h1>

  <h2 class="c3"><a name="h.uflhopltjofk" id=
  "h.uflhopltjofk"></a><span>kernel-list-hook</span></h2>

  <p class="c3"><span>go-susi relies on an external program to
  provide the list of kernels supported for each release (see
  message</span> <span class=
  "c2">gosa_get_available_kernel</span><span>). go-susi calls this
  program without parameters and expects it to print to standard
  output a list in LDIF format that lists all supported releases
  with all supported kernels. Each supported release should have at
  least one entry called</span> <span class=
  "c2">"default"</span><span>. The following example demonstrates
  the syntax:</span></p>

  <p class="c1"></p>

  <p class="c3 c6"><span class="c2">dn:
  cn=vmlinuz-3.0.0-16-generic,ou=kernels,ou=4.1.0,ou=plophos,ou=fai</span></p>

  <p class="c3 c6"><span class="c2">cn:
  vmlinuz-3.0.0-16-generic</span></p>

  <p class="c3 c6"><span class="c2">release:
  plophos/4.1.0</span></p>

  <p class="c1"></p>

  <p class="c3 c6"><span class="c2">dn:
  cn=default,ou=kernels,ou=4.1.0,ou=plophos,ou=fai</span></p>

  <p class="c3 c6"><span class="c2">cn: default</span></p>

  <p class="c3 c6"><span class="c2">release:
  plophos/4.1.0</span></p>

  <p class="c1"></p>

  <p class="c3 c6"><span class="c2">dn:
  cn=default,ou=kernels,ou=plophos,ou=fai</span></p>

  <p class="c3 c6"><span class="c2">cn: default</span></p>

  <p class="c3 c6"><span class="c2">release: plophos</span></p>

  <p class="c1"></p>

  <p class="c3"><span>The above example lists two releases.
  Release</span> <span class=
  "c2">plophos/4.1.0</span><span>&#160;has two available kernel
  options. Release</span> <span class=
  "c2">plophos</span><span>&#160;on the other hand has only
  the</span> <span class=
  "c2">default</span><span>&#160;option.</span></p>

  <p class="c3"><span>The DNs are arbitrary and not evaluated by
  go-susi. They can even be left out completely.</span></p>

  <p class="c3"><span>The attribute names are not
  case-sensitive.</span></p>

  <p class="c3"><span>You can use base64-encoding with LDIF&#8217;s
  double-colon syntax.</span></p>
  <hr style="page-break-before:always;display:none;" />

  <h2 class="c3"><a name="h.lcg0co1fq2xh" id=
  "h.lcg0co1fq2xh"></a><span>package-list-hook</span></h2>

  <p class="c3"><span>go-susi relies on an external program to
  provide the list of packages included in each release and which
  debconf parameters they support (see message</span> <span class=
  "c2">gosa_query_packages_list</span><span>). go-susi calls this
  program without parameters and expects it to print to standard
  output a list in LDIF format that contains the complete package
  database.</span></p>

  <p class="c3 c8"></p>

  <p class="c3 c6"><span class="c2">Release: plophos</span></p>

  <p class="c3 c6"><span class="c2">Package:
  console-setup</span></p>

  <p class="c3 c6"><span class="c2">Version:
  1.34ubuntu15</span></p>

  <p class="c3 c6"><span class="c2">Section: utils</span></p>

  <p class="c3 c6"><span class="c2">Description: console font and
  keymap setup program</span></p>

  <p class="c3 c6"><span class="c2">Templates::
  ClRlbXBsYXRlOi...wgdXNlCgo=</span></p>

  <p class="c1"></p>

  <p class="c3 c6"><span class="c2">Release: plophos</span></p>

  <p class="c3 c6"><span class="c2">Package: sed</span></p>

  <p class="c3 c6"><span class="c2">Section: lhm/utils</span></p>

  <p class="c3 c6"><span class="c2">Version: 4.2.1-6lhm2</span></p>

  <p class="c3 c6"><span class="c2">Description: The GNU sed stream
  editor</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span>The attributes</span> <span class=
  "c2">Package</span><span>,</span> <span class=
  "c2">Section</span><span>,</span> <span class=
  "c2">Version</span><span>&#160;and</span> <span class=
  "c2">Description</span><span>&#160;correspond directly to their
  counterparts from the Debian</span> <span class=
  "c2">control</span><span>&#160;file. The</span> <span class=
  "c2">Release</span><span>&#160;attribute specifies the release
  (aka "distribution") to which the entry belongs.</span></p>

  <p class="c3"><span>The</span> <span class=
  "c2">Templates</span><span>&#160;attribute (</span><span class=
  "c2">"Template"</span><span>&#160;without</span> <span class=
  "c2">"s"</span><span>&#160;is accepted as an alias) is the
  complete contents of the</span> <span class=
  "c2">templates</span><span>&#160;file describing the debconf
  parameters of the package (if it has any).</span></p>

  <p class="c3 c8"></p>
  <hr style="page-break-before:always;display:none;" />

  <p class="c3 c8"></p>

  <h2 class="c3"><a name="h.jl9h7nlx12bl" id=
  "h.jl9h7nlx12bl"></a><span>user-msg-hook</span></h2>

  <p class="c3"><span>go-susi relies on an external program to
  process user notifications from</span> <span class=
  "c2">job_send_user_msg</span><span>. When such a job is up for
  execution, go-susi calls the program configured in</span>
  <span class="c2">[general]/user-msg-hook</span><span>. The hook
  will receive the following environment variables:</span></p>

  <p class="c3 c8"></p>

  <p class="c3 c6"><span class="c4">job:</span></p>

  <p class="c3 c5"><span>The XML of the job entry as returned
  by</span> <span class=
  "c2">gosa_query_jobdb</span><span>&#160;message (with</span>
  <span class="c2">&lt;job&gt;</span><span>&#160;as the outermost
  tag).</span></p>

  <p class="c3 c6"><span class="c4">foo:</span></p>

  <p class="c3 c5"><span>For each child element</span> <span class=
  "c2">&lt;foo&gt;</span><span>&#160;of</span> <span class=
  "c2">&lt;xml&gt;</span><span>&#160;there will be a corresponding
  environment variable with the element's text content
  (</span><span class="c7">not</span><span>&#160;using XML escaping
  like</span> <span class="c2">&amp;lt;</span><span>). If there are
  multiple child elements with the same name, their text values
  will be concatenated separated by newlines.</span></p>

  <p class="c3 c8 c5"></p>

  <p class="c3"><span class="c4">Example:</span></p>

  <p class="c3 c6"><span>The following hook script transmits
  messages to users via email.</span></p>

  <p class="c3 c8"></p>

  <p class="c3 c6"><span class="c2"># The environment variables
  $user, $subject, $group and $message</span></p>

  <p class="c3 c6"><span class="c2"># come from the elements of the
  job_send_user_msg &lt;xml&gt; message.</span></p>

  <p class="c1"></p>

  <p class="c3 c6"><span class="c2">users="$user"</span></p>

  <p class="c1"></p>

  <p class="c3 c6"><span class="c2">for g in $group ; do</span></p>

  <p class="c3 c6"><span class="c2">&#160;
  filter="(&amp;(cn=$g)(objectClass=posixGroup))"</span></p>

  <p class="c3 c6"><span class="c2">&#160; members="$(ldapsearch -x
  -LLL "$filter" memberUid)"</span></p>

  <p class="c3 c6"><span class="c2">&#160; users="$users $(echo
  "$members" | sed -n 's/memberUid: //p')"</span></p>

  <p class="c3 c6"><span class="c2">done</span></p>

  <p class="c1"></p>

  <p class="c3 c6"><span class="c2">for user in $users;
  do</span></p>

  <p class="c3 c6"><span class="c2">&#160; address=$(ldapsearch -x
  -LLL cn=$user mail | sed -n 's/mail: //p')</span></p>

  <p class="c3 c6"><span class="c2">&#160; echo "$message" | mail
  -s "$subject" "$address"</span></p>

  <p class="c3 c6"><span class="c2">done</span></p>
  <hr style="page-break-before:always;display:none;" />

  <h2 class="c3 c24"><a name="h.rz53ht8cs0me" id=
  "h.rz53ht8cs0me"></a></h2>

  <h2 class="c3"><a name="h.3eksnwm3fz5s" id=
  "h.3eksnwm3fz5s"></a><span>pxelinux-cfg-hook</span></h2>

  <p class="c3"><span>When go-susi's built-in TFTP server is asked
  for a file that matches</span> <span class=
  "c2">"pxelinux.cfg/01-&lt;MAC"&gt;</span><span>, go-susi calls
  the program configured in</span> <span class=
  "c2">[general]/pxelinux-cfg-hook</span><span>&#160;and sends its
  standard output as response to the request. Naturally the output
  should be a valid</span> <span class=
  "c2">pxelinux</span><span>&#160;configuration file.</span></p>

  <p class="c3"><span>The hook will receive the following
  environment variables:</span></p>

  <p class="c3 c8"></p>

  <p class="c3 c6"><span class="c4">macaddress:</span>
  <span>(</span><span class="c7">always present and
  non-empty</span><span>)</span></p>

  <p class="c3 c5"><span>The MAC address of the system for which
  the</span> <span class="c2">pxelinux.cfg</span><span>&#160;is
  being requested. The components are separated by ":", not "-".
  The leading</span> <span class="c2">"01-"</span><span>&#160;has
  already been removed.</span></p>

  <p class="c3 c6"><span class=
  "c4">faistate:</span><span>&#160;(</span><span class="c7">may be
  missing or empty</span><span>)</span></p>

  <p class="c3 c5"><span>If go-susi has an opinion on whether the
  system should or should not be installed, it will be communicated
  via this variable. It may be different from the system's LDAP
  object (if it has one) and there may be a faistate variable even
  if there is no LDAP object.</span></p>

  <p class="c3 c6"><span class="c4">dn:</span></p>

  <p class="c3 c5"><span>If there exists an LDAP object for the
  system, that LDAP object's attributes will all be converted to
  environment variables (lowercase). The</span> <span class=
  "c2">dn</span><span>&#160;is always present in that case. The set
  of other attributes may vary.</span></p>
  <hr style="page-break-before:always;display:none;" />

  <h2 class="c3"><a name="h.tmddyclmp68v" id=
  "h.tmddyclmp68v"></a><span>new-config-hook</span></h2>

  <p class="c3"><span>When go-susi receives a</span> <span class=
  "c2">new_foo_config</span><span>&#160;message (e.g.</span>
  <span class="c2">new_ldap_config</span><span>) it calls this hook
  to update system configuration files.</span></p>

  <p class="c3"><span>Depending on the received message the hook
  will receive some of the following environment
  variables:</span></p>

  <p class="c3 c8"></p>

  <p class="c3 c6"><span class="c4">new_ldap_config:</span></p>

  <p class="c3 c5"><span>When this variable is non-empty, it means
  that LDAP configuration should be updated. The following
  environment variables may be present in that case, depending on
  whether the corresponding elements were part of the</span>
  <span class="c2">new_ldap_config</span><span>&#160;message that
  triggered the hook:</span></p>

  <p class="c3 c5"><span class="c4">admin_base, department,
  ldap_base, ldap_uri, release, unit_tag:</span></p>

  <p class="c10 c3"><span>See the description of</span>
  <span class="c2">new_ldap_config</span><span>&#160;for
  details.</span></p>

  <p class="c3 c5"><span class="c4">Note:</span></p>

  <p class="c10 c3"><span>Multiple</span> <span class=
  "c4">ldap_uri</span><span>&#160;values may be present. If so they
  will be separated by newlines in the</span> <span class=
  "c4">ldap_uri</span><span>&#160;environment variable.</span></p>

  <p class="c3 c6"><span class="c4">new_ntp_config:</span></p>

  <p class="c3 c5"><span>When this variable is non-empty, it means
  that NTP configuration should be updated. The following
  environment variable will usually be present (but may not be in
  case the</span> <span class=
  "c2">new_ntp_config</span><span>&#160;did not contain any
  servers):</span></p>

  <p class="c3 c5"><span class="c4">server:</span></p>

  <p class="c10 c3"><span>If present and non-empty this is a
  newline-separated list of NTP servers.</span></p>
  <hr style="page-break-before:always;display:none;" />

  <h1 class="c3"><a name="h.hzdxkgexaqdo" id=
  "h.hzdxkgexaqdo"></a><span>Interfacing with go-susi</span></h1>

  <h2 class="c3"><a name="h.36xshbk95lq" id=
  "h.36xshbk95lq"></a><span>TCP connection to</span> <span class=
  "c2">[server]/port</span></h2>

  <p class="c3"><span>The main way of accessing go-susi's
  functionality is by connecting to it via TCP on the port
  configured in</span> <span class=
  "c2">[server]/port</span><span>&#160;and sending XML-formatted
  requests. Depending on the kind of request go-susi may return an
  XML-formatted answer. Separate go-susi instances will communicate
  via TCP connections. GOsa also uses TCP to interface with
  go-susi.</span></p>

  <h2 class="c3"><a name="h.99ysh1gd1xn3" id=
  "h.99ysh1gd1xn3"></a><span>TCP connection to</span> <span class=
  "c2">[faimon]/port</span></h2>

  <p class="c3"><span>go-susi listens on the TCP port configured
  as</span> <span class="c2">[faimon]/port</span><span>&#160;and
  logs messages received there if the loglevel is set to DEBUG.
  Nothing else is done with these messages.</span></p>

  <h2 class="c3"><a name="h.ue6pv2ufxyrz" id=
  "h.ue6pv2ufxyrz"></a><span>TFTP server on</span> <span class=
  "c2">[tftp]/port</span><span>&#160;(UDP)</span></h2>

  <p class="c3"><span>go-susi runs a read-only TFTP service. This
  service supports the</span> <span class=
  "c2">tsize</span><span>&#160;and</span> <span class=
  "c2">blksize</span><span>&#160;options. It serves 2 kinds of
  files. The first are those pre-configured in the</span>
  <span class="c2">[tftp]</span><span>&#160;section of the
  configuration. In addition to these, go-susi will call the</span>
  <span class=
  "c2">[general]/pxelinux-cfg-hook</span><span>&#160;program to
  generate</span> <span class=
  "c2">pxelinux</span><span>&#160;configuration files on the fly.
  See the section</span> <span class=
  "c4">pxelinux-cfg-hook</span><span>&#160;for more
  details.</span></p>

  <h2 class="c3"><a name="h.l0vggs5nqxsf" id=
  "h.l0vggs5nqxsf"></a><span>Signals</span></h2>

  <p class="c3"><span class="c0">SIGUSR2</span><span>&#160;- this
  signal causes go-susi to call the</span> <span class=
  "c4">kernel-list-hook</span><span>&#160;and</span> <span class=
  "c4">package-list-hook</span><span>&#160;programs to rebuild the
  kernel and packages databases. While the databases are being
  rebuilt, the old data continues to be available. This is
  different from gosa-si-server.</span></p>

  <p class="c3"><span class="c0">SIGUSR1</span><span>&#160;-
  ignored</span></p>

  <p class="c3"><span class="c0">SIGHUP, SIGINT, SIGQUIT,
  SIGTERM</span><span>&#160;- these signals cause a clean shutdown
  of go-susi after all persistent databases have been
  saved.</span><span class="c2">&#160;</span></p>

  <p class="c3"><span class="c0">SIGABRT</span><span>&#160;- causes
  an immediate unclean exit with backtraces of all goroutines.
  Useful for debugging.</span></p>
  <hr style="page-break-before:always;display:none;" />

  <h1 class="c3"><a name="h.3dolgdo847j1" id=
  "h.3dolgdo847j1"></a><span class=
  "c2">/var/lib/go-susi</span><span>&#160;database</span></h1>

  <p class="c3"><span>go-susi maintains its database in memory but
  copies changes to XML files stored in the directory</span>
  <span class="c2">/var/lib/go-susi</span><span>. When go-susi
  starts up, it will populate its internal database with the data
  from these files. This allows data to be persistent across
  restarts of the go-susi daemon.</span></p>

  <p class="c3"><span class="c4">Tip:</span></p>

  <p class="c3 c6"><span>Use the command line tool</span>
  <span class="c2">tidy</span><span>&#160;to view database files.
  E.g.:</span></p>

  <p class="c3 c6"><span class="c2">tidy -xml -indent
  /var/lib/go-susi/clientdb.xml</span></p>

  <h2 class="c3"><a name="h.4alj9q9r8lq3" id=
  "h.4alj9q9r8lq3"></a><span>jobdb.xml</span></h2>

  <p class="c3"><span>This file stores jobs scheduled to be
  executed at a later time as well as progress information for
  long-running jobs such as installations.</span></p>

  <p class="c3"><span>Each entry in</span> <span class=
  "c2">jobdb.xml</span><span>&#160;has the same structure as
  an</span> <span class=
  "c2">&lt;answerX&gt;</span><span>&#160;element from a reply to
  the</span> <span class=
  "c2">gosa_query_jobdb</span><span>&#160;message. See that
  message's description for details.</span></p>

  <h2 class="c3"><a name="h.50wdi3uufl9n" id=
  "h.50wdi3uufl9n"></a><span>serverdb.xml</span></h2>

  <p class="c3"><span>This file stores the other servers known to
  go-susi as well as the current encryption keys used for
  communicating with them.</span></p>

  <p class="c3"><span>Each entry in</span> <span class=
  "c2">serverdb.xml</span><span>&#160;has the same structure as
  a</span> <span class="c2">new_server</span><span>&#160;message.
  See that message's description for details. Note, however, that
  only</span> <span class=
  "c2">&lt;source&gt;</span><span>&#160;and</span> <span class=
  "c2">&lt;key&gt;</span><span>&#160;are required elements in
  a</span> <span class="c2">serverdb.xml</span><span>&#160;entry.
  The other elements described at</span> <span class=
  "c2">new_server</span><span>&#160;may or may not be
  present.</span></p>

  <h2 class="c3"><a name="h.q5bbvyapnxmg" id=
  "h.q5bbvyapnxmg"></a><span>clientdb.xml</span></h2>

  <p class="c3"><span>This file stores both the clients registered
  at this server as well as clients registered at peers.</span></p>

  <p class="c3"><span>Each entry in</span> <span class=
  "c2">clientdb.xml</span><span>&#160;has the same structure as
  a</span> <span class=
  "c2">new_foreign_client</span><span>&#160;message. See that
  message's description for details.</span></p>
  <hr style="page-break-before:always;display:none;" />

  <h1 class="c3"><a name="h.ed4sng37wuoy" id=
  "h.ed4sng37wuoy"></a><span>Messages</span></h1>

  <p class="c3"><span>This chapter lists the XML messages exchanged
  between the various parties communicating with go-susi. The
  messages are grouped into topics with their own
  sub-sections.</span></p>

  <h2 class="c3"><a name="h.cd7ky6j7y55t" id=
  "h.cd7ky6j7y55t"></a><span>Message transmission
  protocol</span></h2>

  <p class="c3"><span>Every message and reply is the
  base64-encoding of an encrypted XML fragment. The encryption key
  used depends on the kind of message. See the code in</span>
  <span class="c2">message/process_msg.go</span><span>&#160;in the
  functions</span> <span class=
  "c2">GosaEncrypt()</span><span>&#160;and</span> <span class=
  "c2">GosaDecrypt()</span><span>&#160;for details on the
  encryption scheme.</span></p>

  <p class="c3"><span>Each message or reply is terminated by</span>
  <span class="c2">LF</span> <span>(</span><span class=
  "c2">"\n"</span><span>)</span><span>&#160;or</span> <span class=
  "c2">CRLF</span><span>&#160;(</span><span class=
  "c2">"\r\n"</span><span>) following the base64-text (which must
  not be broken by whitespace). It is permissible to send multiple
  messages over the same TCP connection. It is the responsibility
  of the process initiating the connection (i.e. the sender of the
  1st message) to close it when it has finished sending all of its
  messages and reading all replies. However, if any party detects
  an error, it should drop the connection as soon as possible
  (after possibly returning an error reply) to avoid
  lockups.</span></p>

  <h2 class="c3"><a name="h.q0xsu7rifamf" id=
  "h.q0xsu7rifamf"></a><span>Message structure and common
  elements</span></h2>

  <p class="c3"><span>Most messages follow a common structure and
  share common elements.</span></p>

  <p class="c3 c8"></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">prefix</span><span class="c2">_foo_bar</span><span class=
  "c0">&lt;/header&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">GOSA</span><span class="c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">123.123.123.123:20081</span><span class=
  "c0">&lt;/target&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c1"></p>

  <p class="c3"><span>The message elements have the following
  meaning:</span></p>

  <p class="c3"><span class="c4">&lt;header&gt;</span></p>

  <p class="c3 c6"><span>This identifies the type of message. Most
  headers have a</span> <span class=
  "c2">"prefix_"</span><span>&#160;component that a group of
  related messages share. A frequent prefix is</span> <span class=
  "c2">"gosa_"</span><span>&#160;which is used by messages sent by
  GOsa.</span></p>

  <p class="c3"><span class="c4">&lt;source&gt;</span></p>

  <p class="c3 c6"><span>The sender of the message. Most of the
  time this is an</span> <span class=
  "c2">IP:PORT</span><span>&#160;address of an si-server or client.
  However if the message is sent by GOsa, the</span> <span class=
  "c4">&lt;source&gt;</span><span>&#160;is</span> <span class=
  "c2">"GOSA".</span></p>

  <p class="c3 c6"><span>Developers wishing to interface with
  go-susi should always fill in an</span> <span class=
  "c2">IP:PORT</span><span>&#160;address with the proper IP of the
  sending computer. Because the</span> <span class=
  "c4">&lt;source&gt;</span><span>&#160;is used as a key in some
  places the same sender should always use the exact same</span>
  <span class="c4">&lt;source&gt;</span><span>.</span></p>

  <p class="c3"><span class="c4">&lt;target&gt;</span></p>

  <p class="c3 c6"><span>The counterpart of</span> <span class=
  "c4">&lt;source&gt;</span><span>. Most of the time this is simply
  the</span> <span class="c2">IP:PORT</span><span>&#160;of the
  recipient, but some message types have the MAC address of an
  affected system in the</span> <span class=
  "c4">&lt;target&gt;</span><span>&#160;element and GOsa, for
  whatever reasons, usually sets</span> <span class=
  "c4">&lt;target&gt;</span><span>&#160;to</span> <span class=
  "c2">"GOSA"</span><span>, even though this makes no
  sense.</span></p>

  <p class="c3 c6"><span>Because</span> <span class=
  "c4">&lt;target&gt;</span><span>&#160;is</span> <span class=
  "c7">not</span><span>&#160;used for message forwarding, it is
  basically useless.</span></p>

  <p class="c3 c6"><span>Developers wishing to interface with
  go-susi should always fill in the</span> <span class=
  "c2">IP:PORT</span><span>&#160;address of the go-susi process
  they target.</span></p>
  <hr style="page-break-before:always;display:none;" />

  <h2 class="c3"><a name="h.v3ibvnwfeq4q" id=
  "h.v3ibvnwfeq4q"></a><span>Reply structure</span></h2>

  <p class="c3"><span>The term reply as used in this manual refers
  only to something that is sent back over the same TCP connection
  as the message the reply refers to. Most messages do not have
  replies and the sender typically closes the connection after
  sending the message. Some messages trigger return messages sent
  over a new connection initiated by the recipient of the first
  message. These return messages are not referred to as replies in
  this manual.</span></p>

  <p class="c3"><span>Like messages in general, most replies follow
  a common structure.</span></p>

  <p class="c1"></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">foo_bar</span><span class="c0">&lt;/header&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">0.0.0.0:20081</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">GOSA</span><span class="c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;answer1&gt;</span><span class=
  "c2">...</span><span class="c0">&lt;/answer1&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;foo_bar&gt;&lt;/foo_bar&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;session_id&gt;</span><span class=
  "c2">5352</span><span class="c0">&lt;/session_id&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span>The message elements have the following
  meaning:</span></p>

  <p class="c3"><span class="c4">&lt;header&gt;</span></p>

  <p class="c3 c6"><span>The header is often derived from the
  message the reply is answering by dropping the</span>
  <span class="c2">"prefix_".</span></p>

  <p class="c3"><span class="c4">&lt;source&gt;,
  &lt;target&gt;</span></p>

  <p class="c3 c6"><span>While these are often simply the swapped
  values of the corresponding elements from the initial message, as
  the example shows they can be even more meaningless.</span></p>

  <p class="c3"><span class="c4">&lt;foo_bar&gt;</span></p>

  <p class="c3 c6"><span>Many replies feature empty elements named
  like the header.</span></p>

  <p class="c3"><span class="c4">&lt;session_id&gt;</span></p>

  <p class="c3 c6"><span>An implementation detail from
  gosa-si-server that may be useful in log entries. For
  compatibility reasons go-susi adds this element to replies but
  the contained value is arbitrary.</span></p>

  <p class="c3"><span class="c4">&lt;answer1&gt;</span></p>

  <p class="c3 c6"><span>When a reply may contain multiple datasets
  with the same structure, they are usually wrapped in</span>
  <span class="c4">&lt;answerX&gt;</span><span>&#160;elements
  where</span> <span class="c4">X</span><span>&#160;is the index of
  the answer.</span></p>
  <hr style="page-break-before:always;display:none;" />

  <h2 class="c3"><a name="h.sh9p65qhzwco" id=
  "h.sh9p65qhzwco"></a><span>Error replies</span></h2>

  <p class="c3"><span>If an error occurs while processing a
  request, the si-server may send an error reply. Usually this is
  only done for messages that have regular replies, in particular
  for messages sent by GOsa. GOsa understands error replies with
  the following structure and may present the contained error
  message as a popup to the user.</span></p>

  <p class="c3 c8"></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">answer</span><span class="c0">&lt;/header&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">123.123.123.123:20081</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">GOSA</span><span class="c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;error_string&gt;</span><span class="c2">Number out of
  range</span><span class="c0">&lt;/error_string&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;answer1&gt;</span><span class="c2">1</span><span class=
  "c0">&lt;/answer1&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c1"></p>

  <p class="c3"><span>The message elements have the following
  meaning:</span></p>

  <p class="c3"><span class=
  "c4">&lt;header&gt;</span><span>&#160;always</span> <span class=
  "c2">"answer".</span></p>

  <p class="c3"><span class=
  "c4">&lt;source&gt;</span><span>&#160;the sending
  server</span></p>

  <p class="c3"><span class=
  "c4">&lt;target&gt;</span><span>&#160;always</span> <span class=
  "c2">"GOSA".</span></p>

  <p class="c3"><span class=
  "c4">&lt;answer1&gt;</span><span>&#160;always "1".</span></p>

  <p class="c3"><span class="c4">&lt;error_string&gt;</span></p>

  <p class="c3 c6"><span>A human-readable description of the error.
  The presence of this element, and not
  &lt;answer1&gt;1&lt;/answer1&gt;, is the best indicator of an
  error.</span></p>

  <p class="c3 c8"></p>

  <h2 class="c3"><a name="h.1tre848fj84d" id=
  "h.1tre848fj84d"></a><span>Encryption keys</span></h2>

  <p class="c3"><span>Messages are encrypted with different keys
  depending on sender and recipient. Unlike gosa-si-server go-susi
  accepts all messages encrypted with all keys. When sending,
  go-susi will follow the gosa-si-server rules on choosing the key
  to encrypt the message.</span></p>

  <p class="c3"><span class="c4">GOsa &#11020; Server:</span></p>

  <p class="c3 c6"><span>Messages by GOsa to the si-server and the
  server's replies are encrypted with the</span> <span class=
  "c4">[GOsaPackages]</span><span>&#160;key.</span></p>

  <p class="c3"><span class="c4">Server &#10132; Client:</span></p>

  <p class="c3 c6"><span>Messages sent by the si-server to
  si-clients registered at that server are always encrypted with
  the key from the most recent</span> <span class=
  "c2">here_i_am</span><span>&#160;or</span> <span class=
  "c2">new_key</span><span>&#160;message sent by the
  client.</span></p>

  <p class="c3"><span class="c4">Server &#10132; Server:</span></p>

  <p class="c3 c6"><span>Messages sent from one server to another
  are encrypted with the most recent key exchanged between sender
  and receiver via</span> <span class=
  "c2">new_server/confirm_new_server</span><span>&#160;messages.</span></p>

  <p class="c3 c6"><span>The only exception to this rule is
  the</span> <span class="c2">new_server</span><span>&#160;message
  which is encrypted with the</span> <span class=
  "c4">[ServerPackages]</span><span>&#160;key, because when it is
  sent there is not yet an agreed key.</span></p>

  <p class="c3"><span class="c4">Client &#10132; Server:</span></p>

  <p class="c3 c6"><span>Messages sent by an si-client to the
  si-server where it is registered are encrypted with the key from
  the most recent</span> <span class=
  "c2">here_i_am</span><span>&#160;or</span> <span class=
  "c2">new_key</span><span>&#160;message sent by the client. The
  only exception to this rule is the</span> <span class=
  "c2">here_i_am</span><span>&#160;message itself which is
  encrypted with the</span> <span class=
  "c4">[ClientPackages]</span><span>&#160;key.</span></p>
  <hr style="page-break-before:always;display:none;" />
  <a href="#" name="id.sj4np8e9wdb8" id="id.sj4np8e9wdb8"></a>

  <h2 class="c3"><a name="h.o2gkp1mdgfab" id=
  "h.o2gkp1mdgfab"></a><span>Jobs</span></h2>

  <p class="c3"><span>One of the core features of the si-server is
  to keep a persistent database of jobs. Each job has a</span>
  <span class="c2">&lt;timestamp&gt;</span><span>&#160;that
  determines when the job is to be executed and an</span>
  <span class="c2">&lt;siserver&gt;</span><span>&#160;field that
  identifies the server responsible for launching that job when its
  time has come</span><span>. Depending on the job's type there may
  be other fields. Usually there is a</span> <span class=
  "c2">&lt;macaddress&gt;</span><span>&#160;that specifies the
  machine to be affected by the job.</span></p>

  <p class="c3"><span>Jobs are created by GOsa in response to user
  actions. There is a distinction between jobs to be executed
  immediately and jobs to be launched at a future time. However, as
  far as the messages are concerned the differences are so minor
  that go-susi (but not gosa-si-server) treats the two forms as
  synonyms.</span></p>

  <p class="c3"><span>Jobs are stored in the jobdb, which in
  go-susi is stored in a file</span> <span class=
  "c2">jobdb.xml</span><span>&#160;described further above. The
  message</span> <span class=
  "c2">gosa_query_jobdb</span><span>&#160;can be used to
  &#160;extract data from the jobdb. GOsa uses this message for its
  deployment status page.</span></p>

  <p class="c3"><span>The message</span> <span class=
  "c2">gosa_update_status_jobdb_entry</span><span>&#160;can modify
  the fields of an existing job and the message</span> <span class=
  "c2">gosa_delete_jobdb_entry</span><span>&#160;can be used to
  remove jobs. Note that GOsa does not allow the removal of running
  install jobs. Instead GOsa offers to cancel them. It does this by
  sending a</span> <span class=
  "c2">gosa_trigger_action_faireboot</span><span>&#160;message.</span></p>

  <p class="c3"><span>When it's time to execute a job, the
  si-server first notifies the target machine (if there is one and
  it's reachable) of the job by sending a</span> <span class=
  "c2">trigger_action_*</span><span>&#160;message. The target
  machine may react to this message by presenting a logged in user
  with a popup asking the user to log out.</span></p>

  <p class="c3"><span>A job has a lifecycle that is reflected in
  its</span> <span class=
  "c2">&lt;status&gt;</span><span>&#160;and</span> <span class=
  "c2">&lt;progress&gt;</span><span>&#160;fields which are
  documented at the message</span> <span class=
  "c2">gosa_query_jobdb.</span><span>&#160;The job starts out
  as</span> <span class="c2">waiting</span><span>, progresses
  to</span> <span class="c2">processing</span><span>&#160;and is
  removed from the jobdb when its</span> <span class=
  "c2">&lt;status&gt;</span><span>&#160;becomes</span> <span class=
  "c2">done.</span><span>&#160;The</span> <span class=
  "c2">&lt;progress&gt;</span><span>&#160;field is only used for
  long-running jobs like installations.</span></p>

  <p class="c3"><span>Jobs are an important part of
  server-to-server communication. The relevant message</span>
  <span class="c2">foreign_job_updates</span><span>&#160;is
  described not in the present section but the one on
  server-to-server communication.</span></p>

  <p class="c3"><span>A special role is played by the
  message</span> <span class=
  "c2">job_trigger_activate_new</span><span>&#160;which is used by
  GOsa for its CSV-import feature. go-susi reacts to this message
  by creating an LDAP object for the target system if there isn't
  one, as well as creating an installation job and activating the
  system. With go-susi</span> <span class=
  "c2">job_trigger_activate_new</span><span>&#160;effectively acts
  as a combination of</span> <span class="c2">detected_hardware,
  job_trigger_action_reinstall</span><span>&#160;and</span>
  <span class=
  "c2">gosa_set_activated_for_installation.</span><span>&#160;gosa-si-server
  handles things differently.</span></p>

  <p class="c3"><span>GOsa's feature for sending messages to users
  and/or groups results in</span> <span class=
  "c2">job_send_user_msg</span><span>&#160;messages which differ
  from ordinary job messages in that they do not target a machine.
  Other than that they are treated like other jobs, are stored in
  the jobdb and can be read with</span> <span class=
  "c2">gosa_query_jobdb,</span><span>&#160;modified with</span>
  <span class=
  "c2">gosa_update_status_jobdb_entry</span><span>&#160;and removed
  with</span> <span class="c2">gosa_delete_jobdb_entry.</span></p>
  <hr style="page-break-before:always;display:none;" />

  <h3 class="c3"><a name="h.lytqmekfw49" id=
  "h.lytqmekfw49"></a><span>job_trigger_action_*</span></h3>

  <h3 class="c3"><a name="h.18ajv1iep81s" id=
  "h.18ajv1iep81s"></a><span>gosa_trigger_action_*</span></h3>

  <p class="c3"><span class="c4">Purpose:</span></p>

  <p class="c3 c6"><span>GOsa&#11020;Server.</span> <span>Schedule
  a job for execution at a later time (</span><span class=
  "c2">job_*</span><span>) or execute it at once</span><span class=
  "c2">&#160;(gosa_*).</span><span>&#160;The server that gets this
  message from GOsa will tell peer servers about the new job
  via</span> <span class=
  "c2">foreign_job_updates</span><span>.</span></p>

  <p class="c3 c6"><span>When the job's time has come, a
  matching</span> <span class=
  "c2">trigger_action_*</span><span>&#160;message will be sent to
  the affected client (if it is reachable).</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">Example message:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">job_trigger_action_lock</span><span class=
  "c0">&lt;/header&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">GOSA</span><span class="c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">00:0c:29:50:a3:52</span><span class=
  "c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;timestamp&gt;</span><span class=
  "c2">20120914131742</span><span class=
  "c0">&lt;/timestamp&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;macaddress&gt;</span><span class=
  "c2">00:0c:29:50:a3:52</span><span class=
  "c0">&lt;/macaddress&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;periodic&gt;</span><span class=
  "c2">7_days</span><span class="c0">&lt;/periodic&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">The message elements have the
  following meaning:</span></p>

  <p class="c3"><span class=
  "c4">&lt;header&gt;</span><span>&#160;identifies the kind of job.
  The following jobs are supported:</span></p>

  <p class="c3 c6"><span class=
  "c4">*_trigger_action_halt</span></p>

  <p class="c3 c5"><span>tell client to shut down (allowing logged
  in users to log out first)</span></p>

  <p class="c3 c6"><span class=
  "c4">*_trigger_action_reboot</span></p>

  <p class="c3 c5"><span>tell client to reboot (allowing logged in
  users to log out first)</span></p>

  <p class="c3 c6"><span class=
  "c4">*_trigger_action_faireboot</span></p>

  <p class="c3 c5"><span>abort FAI operation (e.g. installation) in
  progress</span></p>

  <p class="c3 c6"><span class=
  "c4">*_trigger_action_reinstall</span></p>

  <p class="c3 c5"><span>set faiState to &#8220;install&#8221;;
  tell users to log out; wake client if necessary</span></p>

  <p class="c3 c6"><span class=
  "c4">*_trigger_action_update</span></p>

  <p class="c3 c5"><span>set faiState to &#8220;softupdate&#8221;;
  tell users to log out; wake client if necs.</span></p>

  <p class="c3 c6"><span class=
  "c4">*_trigger_action_localboot</span></p>

  <p class="c3 c5"><span>set faiState to &#8220;localboot&#8221;
  and remove pending install/softupdate jobs</span></p>

  <p class="c3 c6"><span class=
  "c4">*_trigger_action_wake</span></p>

  <p class="c3 c5"><span>send wake-on-lan (WOL) to
  target</span></p>

  <p class="c3 c6"><span class=
  "c4">*_trigger_action_lock</span></p>

  <p class="c3 c5"><span>set gotoMode to locked</span></p>

  <p class="c3 c6"><span class=
  "c4">*_trigger_action_activate</span></p>

  <p class="c3 c5"><span>set gotoMode &#8220;active&#8221;;
  send</span> <span class=
  "c2">set_activated_for_installation</span></p>

  <p class="c3 c8 c5"></p>

  <p class="c3 c6"><span class=
  "c4">&lt;header&gt;</span><span>&#160;will become</span>
  <span class="c4">&lt;headertag&gt;</span><span>&#160;in</span>
  <span class=
  "c2">foreign_job_updates</span><span>&#160;etc.</span></p>

  <p class="c3"><span class="c4">&lt;macaddress&gt;,
  &lt;target&gt;</span></p>

  <p class="c3 c6"><span>At least one of these elements must
  contain a valid MAC address that identifies the machine to be
  affected by the job. If</span> <span class=
  "c4">&lt;macaddress&gt;</span><span>&#160;is present, it will be
  preferred.</span></p>

  <p class="c3 c6"><span>The</span> <span class=
  "c4">&lt;target&gt;</span><span>&#160;value will become</span>
  <span class="c4">&lt;targettag&gt;</span><span>&#160;in</span>
  <span class=
  "c2">foreign_job_updates</span><span>&#160;etc.</span></p>

  <p class="c3"><span class=
  "c4">&lt;timestamp&gt;</span><span>&#160;</span><span class=
  "c7">(optional)</span></p>

  <p class="c3 c6"><span>When the job should be executed. The
  format is "YYYYMMDDHHMMSS". The time is local time of the server
  that receives the message and takes time zone (in particular
  daylight saving time) into account. IOW the job will be executed
  at the earliest time that the server's clock has a value greater
  than the job's timestamp.</span></p>

  <p class="c3 c6"><span>If</span> <span class=
  "c4">&lt;timestamp&gt;</span><span>&#160;is missing, the
  timestamp will be considered to be "now" (meaning the job will be
  executed as soon as possible). "</span><span class=
  "c2">gosa_trigger_*</span><span>" messages do not usually have a
  timestamp.</span></p>

  <p class="c3"><span class=
  "c4">&lt;periodic&gt;</span><span>&#160;</span><span class=
  "c7">(optional)</span></p>

  <p class="c3 c6"><span>The job will be repeated in regular
  intervals. The format is a</span> <span class=
  "c7">number</span><span>&#160;followed by</span> <span class=
  "c2">"_"</span><span>&#160;followed by either</span> <span class=
  "c2">"seconds", "minutes", "hours", "days", "weeks",
  "months"</span><span>&#160;or</span> <span class=
  "c2">"years".</span> <span>Also permitted is</span> <span class=
  "c4">&lt;periodic&gt;</span><span class=
  "c2">none</span><span class=
  "c4">&lt;/periodic&gt;</span><span>&#160;which is the same as not
  having</span> <span class=
  "c4">&lt;periodic&gt;</span><span>.</span></p>

  <p class="c3 c6"><span>If a job is scheduled with</span>
  <span class="c4">&lt;periodic&gt;</span><span>&#160;it will be
  scheduled to run for the first time at the time specified
  in</span> <span class="c4">&lt;timestamp&gt;</span><span>. It
  will run for the 2nd time at the time that results from adding
  the</span> <span class=
  "c4">&lt;periodic&gt;</span><span>&#160;duration to the
  timestamp, for the 3rd time at the time that results from adding
  the duration to the timestamp of the 2nd time, and so on. If, at
  the time the job finishes, one or more of the repeat times have
  already passed, they will be skipped. For example, if a job is
  scheduled every</span> <span class=
  "c2">"1_minutes"</span><span>&#160;and the 1st run takes 1 &#189;
  minutes, the 2nd run will be skipped and the next run will be the
  3rd which will start &#189; minute after the end of the 1st
  run.</span></p>

  <p class="c3 c6"><span>Note that using the unit</span>
  <span class="c2">"days"</span><span>&#160;is different from using
  multiples of 24</span> <span class=
  "c2">"hours"</span><span>&#160;because of daylight savings time
  which may cause days to be longer or shorter. A</span>
  <span class="c2">"week"</span> <span>is the same as 7</span>
  <span class="c2">"days".</span></p>

  <p class="c3 c6"><span>Note that using the
  unit</span><span class="c2">&#160;"months"</span><span>&#160;is
  not the same as any particular number of days because months vary
  in length. The same applies to</span> <span class=
  "c2">"years".</span><span>&#160;E.g. a job scheduled with</span>
  <span class="c4">&lt;timestamp&gt;</span><span class=
  "c2">20120101000000</span><span class=
  "c4">&lt;/timestamp&gt;</span><span>&#160;and</span> <span class=
  "c4">&lt;periodic&gt;</span><span class=
  "c2">1_months</span><span class=
  "c4">&lt;/periodic&gt;</span><span>&#160;will run on 2012-01-01,
  then 2012-02-01, then 2012-03-01,...</span></p>

  <p class="c3 c6"><span>29 February will wrap around to 1 March
  during a non-leap year and from that point on the timestamp will
  stay at the 1st of the month, even during future leap years. 31
  will wrap around to 1 during short months and will stay at
  1.</span></p>

  <p class="c3 c6"><span>IOW, never schedule jobs with a periodic
  unit of</span> <span class="c2">"months"</span><span>&#160;on
  days &gt;= 29.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">gosa-si-server notes:</span></p>

  <p class="c3 c6"><span>This message is handled in</span>
  <span class=
  "c2">modules/GosaPackages.pm:process_job_msg()</span><span>.</span></p>

  <p class="c3 c6"><span>gosa-si-server does not return a reply to
  the</span> <span class="c2">gosa_*</span><span>&#160;messages
  only to</span> <span class="c2">job_*.</span></p>

  <p class="c3"><span class="c4">go-susi notes:</span></p>

  <p class="c3 c6"><span class=
  "c4">&lt;periodic&gt;</span><span>&#160;units</span> <span class=
  "c2">"years"</span><span>&#160;and</span> <span class=
  "c2">"seconds"</span><span>&#160;are go-susi extensions not
  supported by gosa-si. The unit</span> <span class=
  "c2">"seconds"</span><span>&#160;is for testing only.</span></p>

  <p class="c3 c6"><span>go-susi treats</span> <span class=
  "c2">gosa_*</span><span>&#160;and</span> <span class=
  "c2">job_*</span><span>&#160;the same. In particular go-susi will
  send</span> <span class=
  "c2">foreign_job_updates</span><span>&#160;messages for both.
  gosa-si doesn't do this for</span> <span class=
  "c2">gosa_*</span><span>&#160;messages.</span></p>

  <p class="c3 c6"><span>gosa-si-server checks its foreign_clients
  database and if it finds that the affected client is registered
  at a peer server it will forward the job request to the peer with
  an added</span> <span class=
  "c2">&lt;forward_to_gosa&gt;</span><span>&#160;element. go-susi
  does not do this at the time it receives the message but waits
  until the time the job is up for execution and then forwards the
  job if necessary.</span></p>

  <p class="c3 c6"><span>go-susi treats</span> <span class=
  "c2">gosa_set_activated_for_installation</span><span>&#160;as a
  synonym for</span> <span class=
  "c2">gosa_trigger_action_activate</span><span>.</span></p>

  <p class="c3 c6"><span>go-susi
  treats</span><span>&#160;</span><span class=
  "c2">trigger_action_faireboot</span><span>&#160;</span><span>different
  from gosa-si-server. gosa-si-server locks the machine and reboots
  it, but keeps it in</span> <span class=
  "c2">faiState</span><span>&#160;</span><span class=
  "c2">install</span><span>&#160;(if it is installing). The job
  does not actually disappear. While this makes sense for the name
  of the job, it doesn't match how GOsa uses this job. GOsa
  sends</span> <span class=
  "c2">gosa_trigger_action_faireboot</span> <span>when "Abort" is
  selected in the jobs overview. To better match GOsa's use of this
  job, go-susi interprets "faireboot" as "abort job".</span></p>
  <hr style="page-break-before:always;display:none;" />

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">Example reply:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">answer</span><span class="c0">&lt;/header&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">0.0.0.0:20081</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">GOSA</span><span class="c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;answer1&gt;</span><span class="c2">0</span><span class=
  "c0">&lt;/answer1&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;session_id&gt;</span><span class=
  "c2">5352</span><span class="c0">&lt;/session_id&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">The reply elements have the
  following meaning:</span></p>

  <p class="c3 c6"><span class=
  "c4">&lt;answer1&gt;</span><span>&#160;0 if the job was
  successfully added to the jobdb or a numeric error code if there
  was a problem. In the latter case there will be an</span>
  <span class="c4">&lt;error_string&gt;</span><span>&#160;element
  with a human language description of the error.</span></p>

  <p class="c3"><span class="c4">GOsa notes:</span></p>

  <p class="c3 c6"><span>GOsa sends this message in</span>
  <span class=
  "c2">class_gosaSupportDaemon.inc:append()</span><span>.
  The</span> <span class=
  "c2">"job_trigger_action_*"</span><span>&#160;string comes
  from</span> <span class="c2">get_schedule_action()</span>
  <span>or</span> <span class=
  "c2">get_trigger_action()</span><span>&#160;which are defined
  in</span> <span class=
  "c2">class_DaemonEvent.inc</span><span>&#160;and whose values are
  set in the respective subclass, e.g.</span> <span class=
  "c2">class_DaemonEvent_halt.inc.</span></p>

  <p class="c3 c6"><span>GOsa ignores the reply and in fact appears
  to close the connection after sending the message, so that the
  reply cannot even be delivered.</span></p>
  <hr style="page-break-before:always;display:none;" />

  <h3 class="c3"><a name="h.rfc7061kx2wn" id=
  "h.rfc7061kx2wn"></a><span>job_trigger_activate_new</span></h3>

  <p class="c3"><span class="c4">Purpose:</span></p>

  <p class="c3 c6"><span>GOsa&#10132;Server.</span> <span>Create a
  new system object and matching install job. This message is sent
  by GOsa for each entry when using the CSV import feature.
  It&#8217;s typically used to import a whole batch of new systems
  ready for installation, so that they only need to be plugged in
  and turned on.</span></p>

  <p class="c1"></p>

  <p class="c3"><span class="c4">Example message:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">job_trigger_activate_new</span><span class=
  "c0">&lt;/header&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">GOSA</span><span class="c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">00:0c:29:50:a3:52</span><span class=
  "c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;timestamp&gt;</span><span class=
  "c2">20130417120000</span><span class=
  "c0">&lt;/timestamp&gt;</span></p>

  <p class="c3 c5"><span class="c0">&lt;ip&gt;</span><span class=
  "c2">172.16.2.146</span><span class="c0">&lt;/ip&gt;</span></p>

  <p class="c3 c5"><span class="c0">&lt;fqdn&gt;</span><span class=
  "c2">grisham.tvc.example.com</span><span class=
  "c0">&lt;/fqdn&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;ogroup&gt;</span><span class=
  "c2">Desktops</span><span class="c0">&lt;/ogroup&gt;</span></p>

  <p class="c3 c5"><span class="c0">&lt;base&gt;</span><span class=
  "c2">ou=Direktorium,o=go-susi,c=de</span><span class=
  "c0">&lt;/base&gt;</span></p>

  <p class="c3 c5"><span class="c0">&lt;mac&gt;</span><span class=
  "c2">00:0c:29:50:a3:52</span><span class=
  "c0">&lt;/mac&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;macaddress&gt;</span><span class=
  "c2">00:0c:29:50:a3:52</span><span class=
  "c0">&lt;/macaddress&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;dhcp&gt;&lt;/dhcp&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">The message elements have the
  following meaning:</span></p>

  <p class="c3"><span class=
  "c4">&lt;timestamp&gt;</span><span>&#160;</span><span class=
  "c7">(optional)</span></p>

  <p class="c3 c6"><span>A</span> <span class=
  "c2">trigger_action_reinstall</span><span>&#160;job with
  this</span> <span class=
  "c4">&lt;timestamp&gt;</span><span>&#160;will be created.
  If</span> <span class="c4">&lt;timestamp&gt;</span><span>&#160;is
  missing, it defaults to now.</span></p>

  <p class="c3"><span class=
  "c4">&lt;base&gt;</span><span>&#160;</span><span class=
  "c7">(optional)</span></p>

  <p class="c3 c6"><span>The new system object will be put
  into</span> <span class=
  "c2">ou=workstations,ou=systems,&lt;base&gt;</span><span>&#160;or</span>
  <span class=
  "c2">ou=servers,ou=systems,&lt;base&gt;</span><span class=
  "c0">&#160;</span><span>depending on whether it is</span>
  <span class="c2">gotoWorkstation</span><span>&#160;or</span>
  <span class="c2">goServer</span><span>&#160;(based on the</span>
  <span class="c4">&lt;ogroup&gt;</span><span>&#160;information or
  an existing object). If no information about the system's type is
  available, it will be put in</span> <span class=
  "c2">ou=incoming,&lt;base&gt;.</span></p>

  <p class="c3 c6"><span>If an object with the given MAC address
  already exists elsewhere, it will be moved to the new
  location.</span></p>

  <p class="c3 c6"><span>If</span> <span class=
  "c4">&lt;base&gt;</span><span>&#160;is missing and</span>
  <span class="c4">&lt;ogroup&gt;</span><span>&#160;is an object
  group,</span><span class="c4">&#160;</span><span>&#160;the system
  will be put into the same</span> <span class=
  "c2">ou</span><span>&#160;as the alphabetically first member
  system of the object group (even if that</span> <span class=
  "c2">ou</span><span>&#160;is not called</span> <span class=
  "c2">"workstations"</span><span>&#160;or</span> <span class=
  "c2">"servers"</span><span>).</span></p>

  <p class="c3 c6"><span>If</span> <span class=
  "c4">&lt;base&gt;</span><span>&#160;is missing and</span>
  <span class="c4">&lt;ogroup&gt;</span><span>&#160;is also
  missing,</span> <span class=
  "c4">&lt;base&gt;</span><span>&#160;will default to</span>
  <span class="c2">[server]/ldap-base</span><span>&#160;for new
  entries and keep the old location if the system already
  exists.</span></p>

  <p class="c3 c6"><span>If</span> <span class=
  "c4">&lt;base&gt;</span><span>&#160;is missing and</span>
  <span class="c4">&lt;ogroup&gt;</span><span>&#160;is a system,
  the new system object will be put into the same</span>
  <span class="c2">ou</span><span>&#160;as the template system
  (even if that</span> <span class="c2">ou</span><span>&#160;is not
  called</span> <span class=
  "c2">"workstations"</span><span>&#160;or</span> <span class=
  "c2">"servers"</span><span>).</span></p>

  <p class="c3"><span class="c4">&lt;mac&gt;, &lt;macaddress&gt;,
  &lt;target&gt;</span></p>

  <p class="c3 c6"><span>One of these elements must be present. If
  the message has both</span> <span class=
  "c4">&lt;mac&gt;</span><span>&#160;and</span> <span class=
  "c4">&lt;macaddress&gt;</span><span>,</span> <span class=
  "c4">&lt;mac&gt;</span><span>&#160;will take precedence
  over</span> <span class=
  "c4">&lt;macaddress&gt;</span><span>&#160;and an error will be
  logged if they differ.</span></p>

  <p class="c3 c6"><span>If either</span> <span class=
  "c4">&lt;mac&gt;</span><span>&#160;or</span> <span class=
  "c4">&lt;macaddress&gt;</span><span>&#160;is present,</span>
  <span class="c4">&lt;target&gt;</span><span>&#160;is ignored.
  Otherwise it will be used as MAC and it is a fatal error if it is
  not a valid MAC.</span></p>

  <p class="c3"><span class=
  "c4">&lt;ogroup&gt;</span><span>&#160;</span><span class=
  "c7">(optional)</span></p>

  <p class="c3 c6"><span>Either the plain or full-qualified name of
  a system (i.e. LDAP object with</span> <span class=
  "c2">objectClass=GOHard</span><span>) to use as a template or the
  name of an object group (i.e. LDAP object with</span>
  <span class="c2">objectClass=gosaGroupOfNames</span><span>).</span></p>

  <p class="c3 c6"><span>If</span> <span class=
  "c4">&lt;ogroup&gt;</span><span>&#160;is an object group, its
  member list will be sorted alphabetically and the first</span>
  <span class="c2">GOHard</span><span>&#160;member will be used as
  template system.</span></p>

  <p class="c3 c6"><span>If no LDAP object exists for the given MAC
  address, an object will created with a generated name and the
  relevant attributes will be copied from the template
  system.</span></p>

  <p class="c3 c6"><span>The</span> <span class=
  "c2">gotoMode</span><span>&#160;will always be set to</span>
  <span class="c2">active</span><span>, irrespective of the
  template object&#8217;s value.</span></p>

  <p class="c3 c6"><span>If</span> <span class=
  "c4">&lt;ogroup&gt;</span><span>&#160;is missing and there is no
  existing LDAP object, an incomplete entry will be created
  in</span> <span class="c2">ou=incoming,&lt;base&gt;.</span></p>

  <p class="c3"><span class=
  "c4">&lt;ip&gt;</span><span>&#160;</span><span class=
  "c7">(optional)</span></p>

  <p class="c3 c6"><span>If a new system object is created,
  its</span> <span class="c2">ipHostNumber</span><span>&#160;will
  be set to this value. This is mainly useful to make WOL more
  reliable by telling the server about the subnet of the new
  system.</span></p>

  <p class="c3"><span class="c4">&lt;fqdn&gt;</span> <span class=
  "c7">(optional)</span></p>

  <p class="c3 c6"><span>If</span> <span class=
  "c4">&lt;ip&gt;</span><span>&#160;is missing but</span>
  <span class="c4">&lt;fqdn&gt;</span><span>&#160;is present,
  the</span> <span class="c4">&lt;fqdn&gt;</span><span>&#160;will
  be resolved to an IP via DNS. Note that the</span> <span class=
  "c4">&lt;fqdn&gt;</span><span>&#160;will</span> <span class=
  "c7">not</span><span>&#160;be used to name the generated LDAP
  entry. Like</span> <span class=
  "c4">&lt;ip&gt;</span><span>&#160;the purpose of</span>
  <span class="c4">&lt;fqdn&gt;</span><span>&#160;is to make WOL
  more reliable.</span></p>

  <p class="c3"><span class=
  "c4">&lt;dhcp&gt;</span><span>&#160;ignored.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">gosa-si-server notes:</span></p>

  <p class="c3 c6"><span>gosa-si-server ignores</span> <span class=
  "c4">&lt;dhcp&gt;</span><span>&#160;and</span> <span class=
  "c4">&lt;target&gt;</span><span>.</span></p>

  <p class="c3"><span class="c4">go-susi notes:</span></p>

  <p class="c3 c6"><span>go-susi&#8217;s handling of this message
  is different from gosa-si-server&#8217;s in the following
  respects:</span></p><a href="#" name="id.fhvqu6w21q56" id=
  "id.fhvqu6w21q56"></a>

  <ol class="c12" start="1">
    <li class="c15 c3 c5"><span>go-susi creates the system&#8217;s
    LDAP object immediately with a generated name, whereas
    gosa-si-server does not create a system object until the system
    contacts the server.</span></li>

    <li class="c15 c3 c5"><span>go-susi sends a single WOL when the
    install job triggers at the given</span> <span class=
    "c4">&lt;timestamp&gt;</span><span>, whereas gosa-si-server
    keeps sending WOLs until the system contacts the
    server.</span></li>

    <li class="c15 c3 c5"><span class=
    "c4">&lt;ogroup&gt;</span><span>&#160;can be the name of a
    system to use as template, whereas gosa-si-server requires it
    to be an object group.</span></li>

    <li class="c15 c3 c5"><span>If</span> <span class=
    "c4">&lt;base&gt;</span><span>&#160;is missing and</span>
    <span class="c4">&lt;ogroup&gt;</span> <span>is an object
    group, gosa-si-server will derive</span> <span class=
    "c4">&lt;base&gt;</span><span>&#160;from</span> <span class=
    "c4">&lt;ogroup&gt;</span><span>&#8217;s DN whereas go-susi
    derives</span> <span class=
    "c4">&lt;base&gt;</span><span>&#160;from the group's first
    member.</span></li>

    <li class="c15 c3 c5"><span>go-susi creates a normal</span>
    <span class="c2">trigger_action_reinstall</span><span>&#160;job
    when it receives this message.</span></li>
  </ol>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">Example reply:</span></p>

  <p class="c3 c6"><span>see</span> <span class=
  "c2">job_trigger_action_*</span></p>
  <hr style="page-break-before:always;display:none;" />

  <h3 class="c3"><a name="h.b1cynga2n4f7" id=
  "h.b1cynga2n4f7"></a><span>gosa_set_activated_for_installation</span></h3>

  <h3 class="c3"><a name="h.vc4zvgp0v9ry" id=
  "h.vc4zvgp0v9ry"></a><span>job_set_activated_for_installation</span></h3>

  <p class="c3"><span class="c4">Purpose:</span></p>

  <p class="c3 c6"><span>GOsa&#10132;Server.</span> <span>When
  go-susi executes this job, it treats this as a synonym for</span>
  <span class=
  "c2">gosa_trigger_action_activate</span><span>&#160;except that
  there's no reply. However, when go-susi forwards this job to
  another server, it is forwarded with its original header. Because
  gosa-si-server treats the 2 messages differently, it is important
  that the correct message is used if there are gosa-si-server
  peers.</span></p>

  <p class="c3"><span class="c4">go-susi note:</span></p>

  <p class="c3 c6"><span>go-susi accepts the alias</span>
  <span class=
  "c2">job_set_activated_for_installation</span><span>&#160;and
  supports all of the other elements possible for jobs such
  as</span> <span class="c4">&lt;periodic&gt;</span><span>.
  gosa-si-server supports only the</span> <span class=
  "c2">gosa_*</span><span>&#160;form with no job planning
  elements.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">Example message:</span></p>

  <p class="c3"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c6"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">gosa_set_activated_for_installation</span><span class=
  "c0">&lt;/header&gt;<br />
  &lt;source&gt;</span><span class="c2">GOSA</span><span class=
  "c0">&lt;/source&gt;<br />
  &lt;target&gt;</span><span class=
  "c2">00:16:36:7c:db:3f</span><span class=
  "c0">&lt;/target&gt;<br />
  &lt;macaddress&gt;</span><span class=
  "c2">00:16:36:7c:db:3f</span><span class=
  "c0">&lt;/macaddress&gt;</span></p>

  <p class="c3"><span class="c0">&lt;/xml&gt;</span></p>
  <hr style="page-break-before:always;display:none;" />

  <h3 class="c3"><a name="h.y5al68gnxmpw" id=
  "h.y5al68gnxmpw"></a><span>job_send_user_msg</span></h3>

  <p class="c3"><span class="c4">Purpose:</span></p>

  <p class="c3 c6"><span>GOsa&#11020;Server.</span> <span>Send a
  text message to one or more users and/or groups of
  users.</span></p>

  <p class="c3"><span class="c4">go-susi note:</span></p>

  <p class="c3 c6"><span>go-susi does not implement messaging
  services directly. When the job's execution time as determined
  by</span> <span class=
  "c4">&lt;timestamp&gt;</span><span>&#160;has come, the external
  program configured as</span> <span class=
  "c2">[general]/user-msg-hook</span><span>&#160;will be executed.
  See the manual section on that hook for details.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">Example message:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">job_send_user_msg</span><span class=
  "c0">&lt;/header&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">GOSA</span><span class="c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">GOSA</span><span class="c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class="c0">&lt;from&gt;</span><span class=
  "c2">Sender Name</span><span class="c0">&lt;/from&gt;</span></p>

  <p class="c3 c5"><span class="c0">&lt;user&gt;</span><span class=
  "c2">user1</span><span class="c0">&lt;/user&gt;</span></p>

  <p class="c3 c5"><span class="c0">&lt;user&gt;</span><span class=
  "c2">user2</span><span class="c0">&lt;/user&gt;</span></p>

  <p class="c3 c5"><span class="c0">...</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;group&gt;</span><span class="c2">group1</span><span class="c0">&lt;/group&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;group&gt;</span><span class="c2">group2</span><span class="c0">&lt;/group&gt;</span></p>

  <p class="c3 c5"><span class="c0">...</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;subject&gt;</span><span class=
  "c2">QmV0cmVmZg==</span><span class="c0">&lt;/subject&gt;
  &#160;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;message&gt;</span><span class=
  "c2">TmFjaHJpY2h0Ck5hY2hyaWNodCBaZWlsZTI=</span><span class=
  "c0">&lt;/message&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;timestamp&gt;</span><span class=
  "c2">20130409122130</span><span class=
  "c0">&lt;/timestamp&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;delivery_time&gt;</span><span class=
  "c2">20130409122130</span><span class=
  "c0">&lt;/delivery_time&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;periodic&gt;</span><span class=
  "c2">none</span><span class="c0">&lt;/periodic&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;macaddress&gt;</span><span class=
  "c2">GOSA</span><span class="c0">&lt;/macaddress&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c3"><span class="c4">The message elements have the
  following meaning:</span></p>

  <p class="c3 c6"><span class=
  "c4">&lt;header&gt;</span><span>,</span> <span class=
  "c4">&lt;periodic&gt;</span><span>&#160;and</span> <span class=
  "c4">&lt;timestamp&gt;</span><span>&#160;are the only elements
  used by go-susi and they have the same meaning as for</span>
  <span class="c2">job_trigger_action_*</span><span>.</span></p>

  <p class="c3 c6"><span class=
  "c4">&lt;macaddress&gt;</span><span>&#160;will be replaced with
  the go-susi server's MAC.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">Example reply:</span></p>

  <p class="c3 c6"><span class="c2">see
  job_trigger_action_*</span></p>
  <hr style="page-break-before:always;display:none;" />

  <h3 class="c3"><a name="h.wj0yc4cuajj2" id=
  "h.wj0yc4cuajj2"></a><span>gosa_query_jobdb</span></h3>

  <p class="c3"><span class="c4">Purpose:</span></p>

  <p class="c3 c6"><span>GOsa&#11020;Server.</span> <span>Returns
  all entries from the jobdb that match a given filter.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">Example message:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt; &#160; &#160;
  &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;
  &#160;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;header&gt;</span><span class=
  "c2">gosa_query_jobdb</span><span class=
  "c0">&lt;/header&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;target&gt;</span><span class="c2">GOSA</span><span class=
  "c0">&lt;/target&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;source&gt;</span><span class="c2">GOSA</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;where&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160; &#160; &#160;
  &lt;clause&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160; &#160; &#160;
  &#160; &#160; &lt;connector&gt;</span><span class=
  "c2">or</span><span class="c0">&lt;/connector&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160; &#160; &#160;
  &#160; &#160; &lt;phrase&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160; &#160; &#160;
  &#160; &#160; &#160; &#160; &lt;operator&gt;</span><span class=
  "c2">eq</span><span class="c0">&lt;/operator&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160; &#160; &#160;
  &#160; &#160; &#160; &#160; &lt;macaddress&gt;</span><span class=
  "c2">00:1d:60:7e:9b:f6</span><span class=
  "c0">&lt;/macaddress&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160; &#160; &#160;
  &#160; &#160; &lt;/phrase&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160; &#160; &#160;
  &lt;/clause&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;/where&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;orderby&gt;</span><span class="c2">id</span><span class=
  "c0">&lt;/orderby&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;limit&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160; &#160; &#160;
  &lt;from&gt;</span><span class="c2">0</span><span class=
  "c0">&lt;/from&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160; &#160; &#160;
  &lt;to&gt;</span><span class="c2">9999999</span><span class=
  "c0">&lt;/to&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;/limit&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c1"></p>

  <p class="c3"><span class="c4">The message elements have the
  following meaning:</span><span>&#160; &#160; &#160;</span></p>

  <p class="c3"><span class=
  "c4">&lt;source&gt;,&lt;target&gt;</span><span>&#160;always
  "GOSA"</span></p>

  <p class="c3"><span class="c4">&lt;where&gt;</span> <span class=
  "c7">(exactly 1)</span><span>&#160;The filter that selects the
  jobs to return.</span></p>

  <p class="c3"><span class=
  "c4">&lt;clause&gt;</span><span>&#160;</span><span class="c7">(0
  or more)</span></p>

  <p class="c3 c6"><span>A filter condition. All</span>
  <span class="c4">&lt;clause&gt;</span><span>&#160;filter
  conditions within</span> <span class=
  "c4">&lt;where&gt;</span><span>&#160;are ANDed. If no</span>
  <span class="c4">&lt;clause&gt;</span><span>&#160;element is
  present, all datasets will be selected.</span></p>

  <p class="c3"><span class=
  "c4">&lt;connector&gt;</span><span>&#160;</span><span class=
  "c7">(0 or 1)</span></p>

  <p class="c3 c6"><span>If not provided, the default connector is
  "AND". All</span> <span class=
  "c4">&lt;phrase&gt;</span><span>&#160;filter conditions within
  a</span> <span class="c4">&lt;clause&gt;</span><span>&#160;are
  combined by this operator like this:</span></p>

  <p class="c3 c21"><span>P</span><span class=
  "c17">1</span><span>&#160;</span><span class=
  "c7">c</span><span>&#160;P</span><span class=
  "c17">2</span><span>&#160;</span><span class=
  "c7">c</span><span>&#160;P</span><span class=
  "c17">3</span><span>&#160;</span><span class=
  "c7">c</span><span>&#160;... P</span><span class=
  "c17">n</span></p>

  <p class="c3 c6"><span>where P</span><span class=
  "c17">i</span><span>&#160;are the phrase filters and</span>
  <span class="c7">c</span><span>&#160;is the connector. Possible
  values for</span> <span class=
  "c4">&lt;connector&gt;</span><span>&#160;are</span> <span class=
  "c2">"AND"</span> <span>and</span> <span class=
  "c2">"OR"</span><span>&#160;(The case of the word doesn&#8217;t
  matter).</span></p>

  <p class="c3"><span class=
  "c4">&lt;phrase&gt;</span><span>&#160;</span><span class=
  "c7">(</span><span class="c7">0 or more)</span></p>

  <p class="c3 c6"><span>A single primitive filter condition. In
  addition to one</span> <span class=
  "c4">&lt;operator&gt;</span><span>&#160;element (see below)
  a</span> <span class="c4">&lt;phrase&gt;</span><span>&#160;must
  contain exactly one other element. The element's name specifies
  the column name in the database and the element's text content
  the value to compare against. The comparison is performed
  according to</span> <span class=
  "c4">&lt;operator&gt;</span><span>.<br />
  In the case of the jobdb, the valid elements inside</span>
  <span class="c4">&lt;phrase&gt;</span><span>&#160;are</span>
  <span class="c4">&lt;id&gt;</span><span>,</span> <span class=
  "c4">&lt;timestamp&gt;</span><span>,</span> <span class=
  "c4">&lt;status&gt;</span><span>,</span> <span class=
  "c4">&lt;result&gt;</span><span>,</span> <span class=
  "c4">&lt;progress&gt;</span><span>,</span> <span class=
  "c4">&lt;headertag&gt;</span><span>,</span> <span class=
  "c4">&lt;targettag&gt;</span><span>,</span> <span class=
  "c4">&lt;xmlmessage&gt;</span><span>,</span> <span class=
  "c4">&lt;macaddress&gt;</span><span>,</span> <span class=
  "c4">&lt;plainname&gt;</span><span>,</span> <span class=
  "c4">&lt;siserver&gt;</span><span>&#160;and</span> <span class=
  "c4">&lt;modified&gt;</span><span>.</span></p>

  <p class="c3"><span class=
  "c4">&lt;operator&gt;</span><span>&#160;</span><span class=
  "c7">(optional, assumed to be "eq" if missing)</span></p>

  <p class="c3 c6"><span>The comparison operator for the</span>
  <span class="c4">&lt;phrase&gt;</span><span>. Permitted
  operators</span> <span>are</span> <span class="c2">"eq", "ne",
  "ge", "gt", "le", "lt"</span><span>&#160;wi</span><span>th their
  obvious meanings, as well as</span> <span class="c2">"like" and
  "unlike"</span><span>. The case of the operator name
  doesn&#8217;t matter.</span></p>

  <p class="c3 c6"><span class="c2">"like"</span> <span>performs a
  case-insensitive match against a pattern that may include</span>
  <span>"%"</span><span>&#160;to match any sequence of 0 or more
  characters and "</span><span class="c7">_</span><span>" to match
  exactly one character. A literal</span><span>&#160;"%" or
  "_"</span> <span>cannot be embedded in such a
  pattern.</span><span>&#160;</span><span class=
  "c2">"unlike"</span><span>&#160;is the negation of</span>
  <span class="c2">"like"</span><span>.<br />
  The operators</span> <span class="c2">"ge", "gt", "le"</span>
  <span>and</span> <span class="c2">"lt"</span><span>&#160;will
  attempt to convert their arguments to numbers and do a numeric
  comparison. If that fails, a string comparison is performed. The
  other operators always perform string comparison. go-susi
  performs all string comparisons case-insensitive, but gosa-si is
  case-sensitive (which is a gotcha especially with respect to MAC
  addresses).<br />
  The comparison is performed with the database value as the first
  operand. I.e. the</span> <span class="c2">"gt"</span>
  <span>operator will return datasets whose value for the
  respective column is greater than the comparison value
  from</span> <span class=
  "c4">&lt;phrase&gt;</span><span>.</span></p>

  <p class="c3"><span class=
  "c4">&lt;orderby&gt;</span><span>&#160;</span><span class=
  "c7">(optional)</span></p>

  <p class="c3 c6"><span>The name of the column of the database to
  use for sorting the results, optionally followed by "ASC" or
  "DESC" for ascending or descending sort.</span></p>

  <p class="c3"><span class=
  "c4">&lt;limit&gt;</span><span>&#160;</span><span class=
  "c7">(optional)</span><span>&#160;Requests that only parts of the
  result set are returned.</span></p>

  <p class="c3"><span class="c4">&lt;from&gt;</span></p>

  <p class="c3 c6"><span>After sorting query results by</span>
  <span class="c4">&lt;orderby&gt;</span><span>, skip the first N
  results (i.e. do not include them in the reply) where N is the
  integer inside</span> <span class="c4">&lt;from&gt;</span><span>.
  Note: The name</span> <span class=
  "c4">&lt;from&gt;</span><span>&#160;is misleading because it
  suggests that N is the value of the first item to be returned. A
  negative value is treated like 0.</span></p>

  <p class="c3"><span class="c4">&lt;to&gt;</span></p>

  <p class="c3 c6"><span>Return a maximum of N results where N is
  the integer inside</span> <span class=
  "c4">&lt;to&gt;</span><span>. A negative value means no limit.
  Note: The name</span> <span class=
  "c4">&lt;to&gt;</span><span>&#160;is misleading since it suggests
  that N is the value of the last item to be returned.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">gosa-si-server notes:</span></p>

  <p class="c3 c6"><span>gosa-si-server probably permits any</span>
  <span class="c4">&lt;connector&gt;</span><span>&#160;that results
  in a valid SQL statement, not just</span> <span class=
  "c2">"AND"</span><span>&#160;and</span> <span class=
  "c2">"OR"</span><span>. But I have not seen this used in the
  wild, so go-susi doesn't implement any other
  connectors.</span></p>

  <p class="c3 c6"><span>The implementation of</span> <span class=
  "c2">query_jobdb</span><span>&#160;is found in the file</span>
  <span class="c2">databases.pm</span><span>. The parsing of the
  XML filter into an SQL statement is done in</span> <span class=
  "c2">/usr/share/perl5/GOSA/GosaSupportDaemon.pm:get_where/orderby/limit_statement().</span></p>

  <p class="c3 c6"><span>The names</span> <span class=
  "c4">&lt;from&gt;</span><span>&#160;and</span> <span class=
  "c4">&lt;to&gt;</span><span>&#160;suggest that these tags are
  intended to specify a range of values to return but the actual
  implementation translates</span> <span class=
  "c4">&lt;from&gt;</span><span>&#160;to SQL&#8217;s OFFSET
  and</span> <span class="c4">&lt;to&gt;</span><span>&#160;to
  SQL&#8217;s LIMIT.</span></p>

  <p class="c3 c6"><span>The</span> <span class=
  "c4">&lt;operator&gt;</span><span>&#160;is case-insensitive in
  go-susi (i.e. "eQ" means the same as "eq") but gosa-si-server
  requires operators to be lowercase.</span></p>

  <p class="c3 c6"><span>gosa-si-server does not support the</span>
  <span class=
  "c4">&lt;operator&gt;</span><span>&#160;</span><span class=
  "c2">"unlike"</span></p>

  <p class="c3 c6"><span>go-susi performs all string comparisons
  case-insensitive, but gosa-si is case-sensitive (which is a
  gotcha especially with respect to MAC addresses).</span></p>

  <p class="c3"><span class="c4">GOsa notes:</span></p>

  <p class="c3 c6"><span>GOsa sends these requests in</span>
  <span class=
  "c2">include/class_gosaSupportDaemon.inc:get_queued_entries()</span><span>&#160;which
  is called by</span> <span class=
  "c2">plugins/addons/goto/class_filterGotoEvents.inc:query().</span></p>
  <hr style="page-break-before:always;display:none;" />

  <p class="c18 c3 c8"></p>

  <p class="c18 c3"><span class="c4">Example reply (empty
  jobdb):</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;header&gt;</span><span class=
  "c2">query_jobdb</span><span class=
  "c0">&lt;/header&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;source&gt;</span><span class=
  "c2">172.16.2.143:20081</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;target&gt;</span><span class="c2">GOSA</span><span class=
  "c0">&lt;/target&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;session_id&gt;</span><span class="c2">2427</span><span class=
  "c0">&lt;/session_id&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c3"><span class="c4">Example reply (2 jobs):</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;header&gt;</span><span class=
  "c2">query_jobdb</span><span class=
  "c0">&lt;/header&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;source&gt;</span><span class=
  "c2">172.16.2.143:20081</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;target&gt;</span><span class="c2">GOSA</span><span class=
  "c0">&lt;/target&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;answer1&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160; &#160; &#160;
  &lt;plainname&gt;</span><span class=
  "c2">grisham</span><span class="c0">&lt;/plainname&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160; &#160; &#160;
  &lt;progress&gt;</span><span class="c2">none</span><span class=
  "c0">&lt;/progress&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160; &#160; &#160;
  &lt;status&gt;</span><span class="c2">waiting</span><span class=
  "c0">&lt;/status&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160; &#160; &#160;
  &lt;siserver&gt;</span><span class=
  "c2">localhost</span><span class=
  "c0">&lt;/siserver&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160; &#160; &#160;
  &lt;modified&gt;</span><span class="c2">0</span><span class=
  "c0">&lt;/modified&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160; &#160; &#160;
  &lt;targettag&gt;</span><span class=
  "c2">00:0c:29:50:a3:52</span><span class=
  "c0">&lt;/targettag&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160; &#160; &#160;
  &lt;macaddress&gt;</span><span class=
  "c2">00:0c:29:50:a3:52</span><span class=
  "c0">&lt;/macaddress&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160; &#160; &#160;
  &lt;timestamp&gt;</span><span class=
  "c2">20120824131849</span><span class=
  "c0">&lt;/timestamp&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160; &#160; &#160;
  &lt;id&gt;</span><span class="c2">1</span><span class=
  "c0">&lt;/id&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160; &#160; &#160;
  &lt;original_id&gt;</span><span class="c2">1</span><span class=
  "c0">&lt;/original_id&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160; &#160; &#160;
  &lt;headertag&gt;</span><span class=
  "c2">trigger_action_reinstall</span><span class=
  "c0">&lt;/headertag&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160; &#160; &#160;
  &lt;result&gt;</span><span class="c2">none</span><span class=
  "c0">&lt;/result&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160; &#160; &#160;
  &lt;xmlmessage&gt;</span><span class=
  "c2">PHhtbD48aGVhZGVyPmpvYl90cmlnZ2VyX2Fjd</span></p>

  <p class="c3 c6"><span class="c2">&#160; &#160; &#160; &#160;
  Glvbl9yZWluc3RhbGw8L2hlYWRlcPkdPU0E8L3NvdXJjZT48d</span></p>

  <p class="c3 c6"><span class="c2">&#160; &#160; &#160; &#160;
  GFyZ2V0PjAwOjBjOjI5OjUwOmEzOjUyPC90YXJnZXQ+PHRpbW</span></p>

  <p class="c3 c6"><span class="c2">&#160; &#160; &#160; &#160;
  VzdGFtcD4yMDEyMDgyNDEzMTg0OTwvdGltZXN0YW1wPjxtYWN</span></p>

  <p class="c3 c6"><span class="c2">&#160; &#160; &#160; &#160;
  hZGRyZXNzPjAwOjBjOjI5OjUwOmEzOjUyPC9tYWNhZGRyZXNz</span></p>

  <p class="c3 c6"><span class="c2">&#160; &#160; &#160; &#160;
  PjwveG1sPg==</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160; &#160; &#160;
  &lt;/xmlmessage&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;/answer1&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;answer2&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160; &#160; &#160;
  &lt;plainname&gt;</span><span class=
  "c2">grisham</span><span class="c0">&lt;/plainname&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160; &#160; &#160;
  &lt;progress&gt;</span><span class="c2">none</span><span class=
  "c0">&lt;/progress&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160; &#160; &#160;
  &lt;status&gt;</span><span class="c2">waiting</span><span class=
  "c0">&lt;/status&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160; &#160; &#160;
  &lt;siserver&gt;</span><span class=
  "c2">localhost</span><span class=
  "c0">&lt;/siserver&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160; &#160; &#160;
  &lt;modified&gt;</span><span class="c2">0</span><span class=
  "c0">&lt;/modified&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160; &#160; &#160;
  &lt;targettag&gt;</span><span class=
  "c2">00:0c:29:50:a3:52</span><span class=
  "c0">&lt;/targettag&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160; &#160; &#160;
  &lt;macaddress&gt;</span><span class=
  "c2">00:0c:29:50:a3:52</span><span class=
  "c0">&lt;/macaddress&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160; &#160; &#160;
  &lt;timestamp&gt;</span><span class=
  "c2">20120824143205</span><span class=
  "c0">&lt;/timestamp&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160; &#160; &#160;
  &lt;periodic&gt;</span><span class="c2">7_days</span><span class=
  "c0">&lt;/periodic&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160; &#160; &#160;
  &lt;id&gt;</span><span class="c2">2</span><span class=
  "c0">&lt;/id&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160; &#160; &#160;
  &lt;headertag&gt;</span><span class=
  "c2">trigger_action_reboot</span><span class=
  "c0">&lt;/headertag&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160; &#160; &#160;
  &lt;result&gt;</span><span class="c2">none</span><span class=
  "c0">&lt;/result&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160; &#160; &#160;
  &lt;xmlmessage&gt;</span><span class=
  "c2">PHhtbD48aGVhZGVyPmpvYl90cmlnZ2VyX2Fjd</span></p>

  <p class="c3 c6"><span class="c2">&#160; &#160; &#160; &#160;
  Glvbl9yZWJvb3Q8L2hlYWRlcj48cU0E8L3NvdXJjZT48dGFyZ</span></p>

  <p class="c3 c6"><span class="c2">&#160; &#160; &#160; &#160;
  2V0PjAwOjBjOjI5OjUwOmEzOjUyPC90YXJnZXQ+PHRpbWVzdG</span></p>

  <p class="c3 c6"><span class="c2">&#160; &#160; &#160; &#160;
  FtcD4yMDEyMDgyNDE0MzIwNTwvdGltZXN0YW1wPjxwZXJpb2R</span></p>

  <p class="c3 c6"><span class="c2">&#160; &#160; &#160; &#160;
  pYz43X2RheXM8L3BlcmlvZGljPjxtYWNhZGRyZXNzPjAwOjBj</span></p>

  <p class="c3 c6"><span class="c2">&#160; &#160; &#160; &#160;
  OjI5OjUwOmEzOjUyPC9tYWNhZGRyZXNzPjwveG1sPg==</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160; &#160; &#160;
  &lt;/xmlmessage&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;/answer2&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;session_id&gt;</span><span class="c2">5288</span><span class=
  "c0">&lt;/session_id&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c1"></p>

  <p class="c3"><span class="c4">where the base64-encoded
  &lt;xmlmessage&gt; strings are</span></p>

  <p class="c1"></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;header&gt;</span><span class=
  "c2">job_trigger_action_reinstall</span><span class=
  "c0">&lt;/header&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;source&gt;</span><span class="c2">GOSA</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;target&gt;</span><span class=
  "c2">00:0c:29:50:a3:52</span><span class=
  "c0">&lt;/target&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;timestamp&gt;</span><span class=
  "c2">20120824131849</span><span class=
  "c0">&lt;/timestamp&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;macaddress&gt;</span><span class=
  "c2">00:0c:29:50:a3:52</span><span class=
  "c0">&lt;/macaddress&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c1"></p>

  <p class="c3"><span class="c4">and</span></p>

  <p class="c3 c8"></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;header&gt;</span><span class=
  "c2">job_trigger_action_reboot</span><span class=
  "c0">&lt;/header&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;source&gt;</span><span class="c2">GOSA</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;target&gt;</span><span class=
  "c2">00:0c:29:50:a3:52</span><span class=
  "c0">&lt;/target&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;timestamp&gt;</span><span class=
  "c2">20120824143205</span><span class=
  "c0">&lt;/timestamp&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;periodic&gt;</span><span class="c2">7_days</span><span class=
  "c0">&lt;/periodic&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;macaddress&gt;</span><span class=
  "c2">00:0c:29:50:a3:52</span><span class=
  "c0">&lt;/macaddress&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c1"></p>

  <p class="c1"></p>

  <p class="c3"><span class="c4">The reply elements have the
  following meaning:</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class=
  "c4">&lt;plainname&gt;</span><span>&#160;The name (without
  domain) of the machine affected by the job.</span></p>

  <p class="c3"><span class=
  "c4">&lt;progress&gt;</span><span>&#160;Possible
  values:</span></p>

  <p class="c3 c6"><span class="c2">"none":</span><span>&#160; The
  job has not started yet.</span></p>

  <p class="c3 c6"><span class=
  "c2">"hardware-detection":</span><span>&#160;A</span>
  <span class="c2">detect_hardware</span><span>&#160;message has
  been sent to the client.</span></p>

  <p class="c3 c6"><span class=
  "c2">"goto-activation":</span><span>&#160;</span><span class=
  "c2">CLMSG_GOTOACTIVATION</span><span>&#160;has been received
  from client.</span></p>

  <p class="c3 c6"><span>An integer between 1 and 100 (inclusive)
  gives a percentage of how far along the installation has
  progressed.</span></p>

  <p class="c3"><span class=
  "c4">&lt;status&gt;</span><span>&#160;</span><span>Possible
  values:</span></p>

  <p class="c3 c6"><span class="c2">"waiting":</span><span>&#160;No
  action has been performed yet. The server is waiting for the time
  specified by the job's</span> <span class=
  "c4">&lt;timestamp&gt;</span><span>.</span></p>

  <p class="c3 c6"><span class=
  "c2">"processing":</span><span>&#160;The server has started
  taking action on the job.</span></p>

  <p class="c3 c6"><span class=
  "c2">"processed":</span><span>&#160;gosa-si uses this to precede
  "done" in some cases. Not used by go-susi.</span></p>

  <p class="c3 c6"><span class=
  "c2">"paused:"</span><span>&#160;</span><span class=
  "c4">FIXME???</span></p>

  <p class="c3 c6"><span class="c2">"done"</span><span class=
  "c2">:</span><span>&#160;The job has completed. gosa-si allows
  finished jobs to be observed for a short period of time. go-susi
  however removes them immediately, so that the "done" status can
  not be observed. Note that a</span> <span class=
  "c2">foreign_job_updates</span><span>&#160;message can of course
  contain a "done" status.</span></p>

  <p class="c3 c6"><span class=
  "c2">"error":</span><span>&#160;Something went wrong.</span>
  <span class="c4">&lt;result&gt;</span><span>&#160;contains more
  details.</span></p>

  <p class="c3"><span class="c4">&lt;siserver&gt;</span></p>

  <p class="c3 c6"><span>The listen address (IP:port) of the server
  responsible for processing the job. When gosa-si-server sends
  this message, this can also be the word &#8220;localhost&#8221;.
  go-susi never returns "localhost".</span></p>

  <p class="c3"><span class=
  "c4">&lt;modified&gt;</span><span>&#160;Always "1".
  Ignore.</span></p>

  <p class="c3"><span class="c4">&lt;targettag&gt;</span></p>

  <p class="c3 c6"><span>The</span> <span class=
  "c4">&lt;target&gt;</span><span>&#160;from the</span>
  <span class="c2">job_trigger_action_*</span><span>&#160;</span><span>message
  that created the job. This is typically the same as</span>
  <span class="c4">&lt;macaddress&gt;</span><span>.</span></p>

  <p class="c3"><span class=
  "c4">&lt;macaddress&gt;</span><span>&#160;The affected machine's
  MAC address.</span></p>

  <p class="c3"><span class=
  "c4">&lt;timestamp&gt;</span><span>&#160;</span></p>

  <p class="c3 c6"><span>When the job should be executed. The
  format is "YYYYMMDDHHMMSS". The time is local time of the server
  responsible for the job (see</span> <span class=
  "c4">&lt;siserver&gt;</span><span>) and takes daylight saving
  time into account. IOW the job will be executed at the earliest
  time that the responsible server's clock has a value greater than
  the job's timestamp.</span></p>

  <p class="c3"><span class=
  "c4">&lt;periodic&gt;</span><span>&#160;(</span><span class=
  "c7">optional</span><span>)</span></p>

  <p class="c3 c6"><span>The format is a</span> <span class=
  "c7">number</span><span>&#160;followed by &#8220;_&#8221;
  followed by either</span> <span class="c2">"minutes", "hours",
  "days", "weeks", &#160;"months"</span><span>&#160;or</span>
  <span class="c2">"years".</span><span>&#160;Also possible
  is</span> <span class="c4">&lt;periodic&gt;</span><span class=
  "c2">none</span><span class=
  "c4">&lt;/periodic&gt;</span><span>&#160;which is the same
  as</span> <span class="c4">&lt;periodic&gt;</span><span>&#160;not
  being present</span><span>.</span></p>

  <p class="c3 c6"><span>See</span> <span class=
  "c2">job_trigger_action_*</span><span>&#160;for more information
  on the exact interpretation of</span> <span class=
  "c4">&lt;periodic&gt;</span><span>.</span></p>

  <p class="c3"><span class="c4">&lt;id&gt;</span></p>

  <p class="c3 c6"><span>A string that identifies the job (not
  necessarily a number; in particular not a 32bit number). Jobs
  are</span> <span class="c7">not</span><span>&#160;reindexed when
  a job is deleted, so some ids may be &#8220;missing&#8221;. In
  particular the</span> <span class=
  "c4">&lt;id&gt;</span><span>&#160;is</span> <span class=
  "c7">not</span><span>&#160;identical to the XX in</span>
  <span class="c4">&lt;answerXX&gt;</span><span>. Answers are
  always numbered starting from 1 with no missing
  numbers.</span></p>

  <p class="c3"><span class=
  "c4">&lt;original_id&gt;</span><span>&#160;</span><span class=
  "c7">(optional)</span></p>

  <p class="c3 c6"><span>the</span> <span class=
  "c4">&lt;id&gt;</span><span>&#160;of the job on the
  responsible</span> <span class=
  "c4">&lt;siserver&gt;</span><span>&#160;(which may be different
  from</span> <span class="c4">&lt;id&gt;</span><span>).</span></p>

  <p class="c3"><span class="c4">&lt;headertag&gt;</span></p>

  <p class="c3 c6"><span>Identifies the type of job. Derived from
  the &lt;header&gt; of the message that created the job by
  removing the prefix. E.g.</span> <span class=
  "c2">gosa_trigger_action_localboot &#8658;
  trigger_action_localboot.</span></p>

  <p class="c3"><span class=
  "c4">&lt;result&gt;</span><span>&#160;Further information about
  the job. Possible values:</span></p>

  <p class="c3 c6"><span>"none": No information
  available.</span></p>

  <p class="c3 c6"><span>error description: If</span> <span class=
  "c4">&lt;status&gt;</span><span class=
  "c2">error</span><span class="c4">&lt;/status&gt;</span><span>,
  this is a human-readable description with more
  information.</span></p>

  <p class="c3 c6"><span>&#8220;TASKBEGIN foo&#8221; where
  &#8220;foo&#8221; is the most recent task sent by the client in a
  &#160;</span><span class=
  "c2">CLMSG_TASKBEGIN</span><span>&#160;message during
  installation.</span></p>

  <p class="c3"><span class="c4">&lt;xmlmessage&gt;</span></p>

  <p class="c3 c6"><span>base64-encoded &lt;xml&gt;...&lt;/xml&gt;
  message that was used to add this job to the database, usually
  a</span> <span class=
  "c2">job_trigger_action_*</span><span>&#160;message.</span></p>
  <hr style="page-break-before:always;display:none;" />

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">gosa-si-server notes:</span></p>

  <p class="c3 c6"><span>New jobs always get the highest existing
  job</span> <span class="c4">&lt;id&gt;</span><span>&#160;+ 1.
  Because unfortunately GOsa uses the id column to identify a job
  when it sends</span> <span class=
  "c2">gosa_delete_jobdb_entry</span><span>&#160;this seems to
  allow for a race condition where user X wants to delete the
  highest-numbered job but before the request reaches the
  gosa-si-server another user Y deletes said job and adds a new
  job. This would cause user X to incorrectly delete user Y&#8217;s
  new job.<br />
  go-susi does not have this problem because it doesn&#8217;t
  repeat</span> <span class=
  "c4">&lt;id&gt;</span><span>&#160;values.</span></p>

  <p class="c3 c6"><span>gosa-si-server splits up the</span>
  <span class="c4">&lt;xmlmessage&gt;</span><span>&#160;with
  whitespace which breaks base64-decoding unless the whitespace is
  removed first.</span></p>

  <p class="c3 c6"><span>gosa-si-server does not report</span>
  <span class="c4">&lt;original_id&gt;</span><span>.</span></p>

  <p class="c3 c6"><span>gosa-si treats</span> <span class=
  "c4">&lt;macaddress&gt;</span><span>&#160;as
  case-sensitive.</span></p>

  <p class="c3"><span class="c4">GOsa notes:</span></p>

  <p class="c3 c6"><span>AFAICT GOsa doesn't care about the
  reply's</span> <span class=
  "c4">&lt;source&gt;</span><span>,</span> <span class=
  "c4">&lt;target&gt;</span><span>&#160;and</span> <span class=
  "c4">&lt;session_id&gt;</span><span>.</span></p>

  <p class="c3 c6"><span>AFAICT GOsa doesn't care about</span>
  <span class="c4">&lt;targettag&gt;</span><span>&#160;and there's
  no other use I can find. IOW it's completely useless.</span></p>
  <hr style="page-break-before:always;display:none;" />

  <p class="c3 c8"></p>

  <h3 class="c3"><a name="h.am3mtnji9zso" id=
  "h.am3mtnji9zso"></a><span>gosa_delete_jobdb_entry</span></h3>

  <p class="c3"><span class="c4">Purpose:</span></p>

  <p class="c3 c6"><span>GOsa&#11020;Server. Remove planned jobs
  from the database. Sends</span> <span class=
  "c2">foreign_job_updates</span><span>&#160;with</span>
  <span class=
  "c4">&lt;status&gt;</span><span>done</span><span class=
  "c4">&lt;/status&gt;</span><span>&#160;and</span> <span class=
  "c4">&lt;periodic&gt;</span><span>none</span><span class=
  "c4">&lt;/periodic&gt;</span><span>&#160;(or no</span>
  <span class="c4">&lt;periodic&gt;</span><span>&#160;at
  all)</span><span class="c4">&#160;</span><span>to peer servers to
  make them remove the jobs from their databases as
  well.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">Example message:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">gosa_delete_jobdb_entry</span><span class=
  "c0">&lt;/header&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">GOSA</span><span class="c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">GOSA</span><span class="c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class="c0">&lt;where&gt;</span></p>

  <p class="c3 c5"><span class="c0">&#160; &#160; &#160;
  &lt;clause&gt;</span></p>

  <p class="c3 c5"><span class="c0">&#160; &#160; &#160; &#160;
  &#160; &#160; &lt;connector&gt;</span><span class=
  "c2">or</span><span class="c0">&lt;/connector&gt;</span></p>

  <p class="c3 c5"><span class="c0">&#160; &#160; &#160; &#160;
  &#160; &#160; &lt;phrase&gt;</span></p>

  <p class="c3 c5"><span class="c0">&#160; &#160; &#160; &#160;
  &#160; &#160; &#160; &#160; &#160;
  &lt;operator&gt;</span><span class="c2">eq</span><span class=
  "c0">&lt;/operator&gt;</span></p>

  <p class="c3 c5"><span class="c0">&#160; &#160; &#160; &#160;
  &#160; &#160; &#160; &#160; &#160; &lt;id&gt;</span><span class=
  "c2">1</span><span class="c0">&lt;/id&gt;</span></p>

  <p class="c3 c5"><span class="c0">&#160; &#160; &#160; &#160;
  &#160; &#160; &lt;/phrase&gt;</span></p>

  <p class="c3 c5"><span class="c0">&#160; &#160; &#160;
  &lt;/clause&gt;</span></p>

  <p class="c3 c5"><span class="c0">&lt;/where&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c1"></p>

  <p class="c3"><span class="c4">The message elements have the
  following meaning:</span></p>

  <p class="c3 c6"><span>Aside from the</span> <span class=
  "c4">&lt;header&gt;</span><span>&#160;the elements are the same
  as for</span> <span class=
  "c2">gosa_query_jobdb</span><span>.</span></p>
  <hr style="page-break-before:always;display:none;" />

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">Example reply:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">answer</span><span class="c0">&lt;/header&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">0.0.0.0:20081</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">GOSA</span><span class="c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;answer1&gt;</span><span class="c2">0</span><span class=
  "c0">&lt;/answer1&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;session_id&gt;</span><span class=
  "c2">5352</span><span class="c0">&lt;/session_id&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c1"></p>

  <p class="c3"><span class="c4">The reply elements have the
  following meaning:</span></p>

  <p class="c3 c6"><span class=
  "c4">&lt;answer1&gt;</span><span>&#160;0 if the jobs were
  successfully deleted or a numeric error code if there was a
  problem. In the latter case there will be an</span> <span class=
  "c4">&lt;error_string&gt;</span><span>&#160;element with a human
  language description of the error.</span></p>

  <p class="c3 c6"><span>If no job matches the query that is not an
  error.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">gosa-si-server notes:</span></p>

  <p class="c3 c6"><span>Some versions of gosa-si-server return
  broken replies to this message. The contained answer element is
  unusable, e.g.</span> <span class=
  "c4">&lt;answer1&gt;</span><span class=
  "c2">ARRAY(0xa3dfda8)</span><span class=
  "c4">&lt;/answer1&gt;</span><span>.</span></p>

  <p class="c1"></p>

  <p class="c3"><span class="c4">go-susi notes:</span></p>

  <p class="c3 c6"><span>When the job to be deleted is another
  server&#8217;s responsibility, go-susi will forward the deletion
  request to that server. go-susi will not remove the job from its
  own database unless the responsible server reacts to the
  forwarded request. This means that jobs from servers that are
  down cannot be deleted. However, when go-susi cannot establish a
  connection to a server for some time, it will automatically purge
  that server&#8217;s jobs from its database.</span></p>

  <p class="c3 c8 c18"></p>

  <p class="c3"><span class="c4">GOsa notes:</span></p>

  <p class="c3 c6"><span>This message is sent in</span>
  <span class="c2">class_gosaSupportDaemon.inc:remove_entries()</span><span>.</span></p>

  <p class="c3 c6"><span>GOsa always uses the id column to identify
  the jobs. See the notes for</span> <span class=
  "c2">gosa_query_jobdb</span><span>&#160;regarding</span>
  <span class="c4">&lt;id&gt;</span><span>.</span></p>

  <p class="c3 c6"><span>GOsa does not care about the actual reply.
  The only requirement is that the outer-most tag must be
  either</span> <span class=
  "c4">&lt;xml&gt;</span><span>&#160;or</span> <span class=
  "c4">&lt;count&gt;</span><span>. If it isn't GOsa will log an
  error.</span></p>
  <hr style="page-break-before:always;display:none;" />

  <p class="c1"></p>

  <h3 class="c3"><a name="h.aa2wm0ojc2ux" id=
  "h.aa2wm0ojc2ux"></a><span>gosa_update_status_jobdb_entry</span></h3>

  <p class="c3"><span class="c4">Purpose:</span></p>

  <p class="c3 c6"><span>GOsa&#11020;Server. Change properties of a
  scheduled job. Sends</span> <span class=
  "c2">foreign_job_updates</span><span>&#160;with the new
  data</span><span class="c4">&#160;</span><span>to peer
  servers.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">Example message:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">gosa_update_status_jobdb_entry</span><span class=
  "c0">&lt;/header&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">GOSA</span><span class="c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">GOSA</span><span class="c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class="c0">&lt;where&gt;</span></p>

  <p class="c10 c3"><span class="c0">&lt;clause&gt;</span></p>

  <p class="c3 c14"><span class=
  "c0">&lt;connector&gt;</span><span class=
  "c2">or</span><span class="c0">&lt;/connector&gt;</span></p>

  <p class="c3 c14"><span class="c0">&lt;phrase&gt;</span></p>

  <p class="c3 c22"><span class=
  "c0">&lt;operator&gt;</span><span class=
  "c2">eq</span><span class="c0">&lt;/operator&gt;</span></p>

  <p class="c22 c3"><span class="c0">&lt;id&gt;</span><span class=
  "c2">1</span><span class="c0">&lt;/id&gt;</span></p>

  <p class="c3 c14"><span class="c0">&lt;/phrase&gt;</span></p>

  <p class="c10 c3"><span class="c0">&lt;/clause&gt;</span></p>

  <p class="c3 c5"><span class="c0">&lt;/where&gt;</span></p>

  <p class="c3 c5"><span class="c0">&lt;update&gt;</span></p>

  <p class="c10 c3"><span class=
  "c0">&lt;timestamp&gt;</span><span class=
  "c2">20121019132424</span><span class=
  "c0">&lt;/timestamp&gt;</span></p>

  <p class="c3 c5"><span class="c0">&lt;/update&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c1"></p>

  <p class="c3"><span class="c4">The message elements have the
  following meaning:</span></p>

  <p class="c3 c6"><span>Aside from</span> <span class=
  "c4">&lt;header&gt;</span><span>&#160;and</span> <span class=
  "c4">&lt;update&gt;</span><span>&#160;the elements are the same
  as for</span> <span class=
  "c2">gosa_query_jobdb</span><span>.</span></p>

  <p class="c1"></p>

  <p class="c3 c6"><span class="c4">&lt;update&gt;</span></p>

  <p class="c3 c5"><span>Each subelement of</span> <span class=
  "c4">&lt;update&gt;</span><span>&#160;sets a new value for the
  respective aspect of the job(s). All other aspects of the job
  remain unchanged. To unset</span> <span class=
  "c4">&lt;periodic&gt;</span><span>, include</span> <span class=
  "c4">&lt;periodic&gt;</span><span class=
  "c2">none</span><span class="c4">&lt;/periodic&gt;</span><span>.
  It is permissible to change</span> <span class=
  "c4">&lt;status&gt;</span> <span>with this command although this
  only make sense in a few cases.</span></p>

  <p class="c3 c5"><span>Note that it is possible to change
  multiple jobs at the same time with an appropriate</span>
  <span class="c4">&lt;where&gt;</span><span>, but there is only
  one</span> <span class=
  "c4">&lt;update&gt;</span><span>&#160;element that is applied to
  all selected jobs.</span></p>
  <hr style="page-break-before:always;display:none;" />

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">Example reply:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">answer</span><span class="c0">&lt;/header&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">172.16.2.143:20081</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">GOSA</span><span class="c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;answer1&gt;</span><span class="c2">0</span><span class=
  "c0">&lt;/answer1&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;session_id&gt;</span><span class=
  "c2">5352</span><span class="c0">&lt;/session_id&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c1"></p>

  <p class="c3"><span class="c4">The reply elements have the
  following meaning:</span></p>

  <p class="c3 c6"><span class=
  "c4">&lt;answer1&gt;</span><span>&#160;0 if the jobs were
  successfully deleted or a numeric error code if there was a
  problem. In the latter case there will be an</span> <span class=
  "c4">&lt;error_string&gt;</span><span>&#160;element with a human
  language description of the error.</span></p>

  <p class="c3 c6"><span>If no job matches the query that is not an
  error.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">gosa-si-server notes:</span></p>

  <p class="c3 c6"><span>gosa-si-server disallows changing the
  timestamp on jobs that have status
  &#8220;processing&#8221;.</span></p>

  <p class="c3"><span class="c4">go-susi notes:</span></p>

  <p class="c3 c6"><span>When go-susi receives an update request
  for a job that is another server&#8217;s responsibility, it will
  forward the request to that server. go-susi will not change its
  own job information immediately but will wait for the responsible
  server to react. This means that if the responsible server is
  down,</span> <span class=
  "c2">gosa_update_status_jobdb_entry</span><span>&#160;will have
  no observable effect on go-susi&#8217;s database.</span></p>

  <p class="c3"><span class="c4">GOsa notes:</span></p>

  <p class="c3 c6"><span>GOsa has a bug in its edit job page (if
  you select a job&#8217;s &#8220;Edit&#8221; icon on the
  &#8221;Deployment status&#8221; page). If a job has</span>
  <span class="c4">&lt;periodic&gt;</span><span>&#160;set and you
  uncheck the respective checkbox when editing the job, the</span>
  <span class="c4">&lt;periodic&gt;</span><span>&#160;will not
  actually be cleared, because GOsa omits the</span> <span class=
  "c4">&lt;periodic&gt;</span><span>&#160;from the</span>
  <span class="c4">&lt;update&gt;</span><span>&#160;element instead
  of setting it to &#8220;none&#8221;.</span></p>

  <p class="c3 c6"><span>This message is sent in</span>
  <span class="c2">class_gosaSupportDaemon.inc:update_entries()</span><span>.</span></p>

  <p class="c3 c6"><span>GOsa always uses the id column to identify
  the jobs. See the notes for</span> <span class=
  "c2">gosa_query_jobdb</span><span>&#160;regarding</span>
  <span class="c4">&lt;id&gt;</span><span>.</span></p>

  <p class="c3 c6"><span>GOsa does not care about the actual reply.
  The only requirement is that the outer-most tag must be</span>
  <span class="c4">&lt;xml&gt;</span><span>. If there is an</span>
  <span class="c4">&lt;error_string&gt;</span><span>&#160;element,
  GOsa will log an error.</span></p>
  <hr style="page-break-before:always;display:none;" />
  <a href="#" name="id.8rs4yx8or7cf" id="id.8rs4yx8or7cf"></a>

  <h2 class="c3"><a name="h.n1abt4rakrkh" id=
  "h.n1abt4rakrkh"></a><span>Server - Server</span></h2>

  <p class="c3"><span>There are various reasons for running
  multiple servers with GOsa and an accompanying si-server. To make
  administration easier, si-servers exchange information that
  allows different instances of GOsa to be used interchangeably.
  For example you can plan a job in one GOsa and cancel the job in
  another.</span></p>

  <p class="c3"><span>When an si-server starts up it looks into its
  configuration file and DNS for peer si-servers. It will then send
  a</span> <span class="c2">new_server</span><span>&#160;message to
  each peer. Peers that are reachable will send</span> <span class=
  "c2">confirm_new_server</span><span>&#160;messages in return.
  After this exchange the servers have a common encryption key and
  know about each other's list of registered clients.</span></p>

  <p class="c3"><span>Whenever one server changes the information
  about a job in its database, e.g. because of a message
  like</span> <span class=
  "c2">gosa_delete_jobdb_entry</span><span>&#160;or because a
  client performing an installation has sent a</span> <span class=
  "c2">CLMSG_PROGRESS</span><span>, the server informs all of its
  peers about the change with a</span> <span class=
  "c2">foreign_job_updates</span><span>&#160;message, so that the
  peers can apply the same change to their databases.</span></p>

  <p class="c3"><span>Because a gosa-si-client only accepts
  messages from the server it registered at, only that server can
  properly execute jobs that require sending messages to that
  client. In particular this affects jobs that require the client
  to reboot or shut down. To solve this problem the server will
  forward such jobs to the peer where the client is
  registered.</span></p>

  <p class="c3"><span>To make forwarding work, each server must
  know at all times which clients are registered at which servers.
  Therefore, whenever a client registers at a server, that server
  will send a</span> <span class=
  "c2">new_foreign_client</span><span>&#160;message to all of its
  peers to inform them about the new client. There is no
  corresponding deregistration. A client is considered to belong to
  a specific server until it registers at another one.</span></p>

  <p class="c3"><span>A job is forwarded to a peer by sending that
  peer the appropriate</span> <span class=
  "c2">gosa_trigger_action_*</span><span>&#160;message.</span></p>

  <p class="c3"><span>A special case are wakeup jobs. These are not
  forwarded in the sense that the responsibility for the wakeup is
  passed on to the peer. Instead, peers may be asked to help waking
  up a client, because a peer may have information about the
  client's network location that the original server responsible
  for the job lacks. To recruit the help from a peer in waking up a
  client the</span> <span class=
  "c2">trigger_wake</span><span>&#160;message is used.</span></p>

  <p class="c3"><span class="c4">Note:</span></p>

  <p class="c3 c6"><span>While go-susi and gosa-si-server both
  follow the general principles outlined above for the forwarding
  of jobs, the timing and the message details are different for the
  two.</span></p>
  <hr style="page-break-before:always;display:none;" />

  <h3 class="c3"><a name="h.ggvkhagjviu" id=
  "h.ggvkhagjviu"></a><span>new_server</span></h3>

  <p class="c3"><span class="c4">Purpose:</span></p>

  <p class="c3 c6"><span>Server&#10132;Server.</span> <span>A
  server announces its presence to another server so that the
  receiving server will inform the sending server about job updates
  etc.</span></p>

  <p class="c3 c6"><span>The receiving server must react by sending
  a</span> <span class=
  "c2">confirm_new_server</span><span>&#160;message to the sender
  (via a new connection). The sender will keep using the old
  encryption key if it does not receive a</span> <span class=
  "c2">confirm_new_server</span><span>&#160;message with the new
  key or, if there is no old key, communication will fail
  altogether.</span></p>

  <p class="c1"></p>

  <p class="c3"><span class="c4">Example message (encrypted with
  [ServerPackages] key):</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">new_server</span><span class="c0">&lt;/header&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;new_server&gt;&lt;/new_server&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">172.16.2.143:20081</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">172.16.2.184:20081</span><span class=
  "c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class="c0">&lt;key&gt;</span><span class=
  "c2">eTlWFLUYpRhCKBpagk5B4Zk3NkDcLco</span><span class=
  "c0">&lt;/key&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;loaded_modules&gt;</span><span class=
  "c2">gosaTriggered</span><span class=
  "c0">&lt;/loaded_modules&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;loaded_modules&gt;</span><span class=
  "c2">siTriggered</span><span class=
  "c0">&lt;/loaded_modules&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;loaded_modules&gt;</span><span class=
  "c2">clMessages</span><span class=
  "c0">&lt;/loaded_modules&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;loaded_modules&gt;</span><span class=
  "c2">server_server_com</span><span class=
  "c0">&lt;/loaded_modules&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;loaded_modules&gt;</span><span class=
  "c2">databases</span><span class=
  "c0">&lt;/loaded_modules&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;loaded_modules&gt;</span><span class=
  "c2">logHandling</span><span class=
  "c0">&lt;/loaded_modules&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;loaded_modules&gt;</span><span class=
  "c2">goSusi</span><span class=
  "c0">&lt;/loaded_modules&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;client&gt;</span><span class=
  "c2">172.16.2.143:20083,00:50:56:37:63:21</span><span class=
  "c0">&lt;/client&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;client&gt;</span><span class=
  "c2">172.16.2.22:20083,00:1b:61:72:79:f5</span><span class=
  "c0">&lt;/client&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;macaddress&gt;</span><span class=
  "c2">00:50:56:37:63:21</span><span class=
  "c0">&lt;/macaddress&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c3"><span class="c4">The message elements have the
  following meaning:</span></p>

  <p class="c3"><span class=
  "c4">&lt;new_server&gt;</span><span>&#160;Always
  empty.</span></p>

  <p class="c3"><span class="c4">&lt;key&gt;</span></p>

  <p class="c3 c6"><span>A randomly generated string of letters and
  digits to be used for server-server communication between sender
  and receiver. Replaces the most recent key exchanged between the
  2 servers via</span> <span class=
  "c2">new_server</span><span>/</span><span class=
  "c2">confirm_new_server</span><span>. The sender won't actually
  use the new key until it receives a</span> <span class=
  "c2">confirm_new_server</span><span>.</span></p>

  <p class="c3"><span class=
  "c4">&lt;loaded_modules&gt;</span><span>&#160;(</span><span class="c7">0
  or more times</span><span>) Modules supported by the sending
  server.</span></p>

  <p class="c3 c6"><span>A server that advertises "goSusi" in this
  list (as go-susi does) promises the following:</span></p>

  <ol class="c12" start="1">
    <li class="c15 c3 c5"><span>All</span> <span class=
    "c2">foreign_job_updates</span><span>&#160;it sends will be
    synchronous (see</span> <span class=
    "c4">&lt;sync&gt;</span><span>&#160;description
    there)</span></li>

    <li class="c15 c3 c5"><span>It will send out a</span>
    <span class="c2">foreign_job_updates</span><span>&#160;message
    whenever a job it is responsible for changes, even if that
    change is caused by a</span> <span class=
    "c2">foreign_job_updates</span><span>. Note the restriction of
    this rule to jobs the "goSusi" server is responsible for (i.e.
    those that have it as</span> <span class=
    "c4">&lt;siserver&gt;</span><span>). Without this restriction
    there would be infinite series of update messages.</span></li>

    <li class="c15 c3 c5"><span>When it establishes a connection
    with the receiving peer for the first time or re-establishes it
    after an interruption, it will send a</span> <span class=
    "c2">foreign_job_updates</span><span>&#160;with</span>
    <span class="c4">&lt;sync&gt;</span><span class=
    "c2">all</span><span class=
    "c4">&lt;/sync&gt;</span><span>.</span></li>

    <li class="c15 c3 c5"><span>All jobs have a unique</span>
    <span class="c4">&lt;id&gt;</span><span>&#160;which is
    contained in</span> <span class=
    "c2">gosa_query_jobdb</span><span>&#160;replies as well
    as</span> <span class=
    "c2">foreign_job_updates</span><span>&#160;messages and can be
    used to address jobs with specificity in</span> <span class=
    "c4">&lt;where&gt;</span><span>&#160;clauses.</span></li>

    <li class="c15 c3 c5"><span>When a "goSusi" server sends out
    a</span> <span class=
    "c2">foreign_job_updates</span><span>&#160;message that affects
    a job whose</span> <span class=
    "c4">&lt;siserver&gt;</span><span>&#160;is another server, it
    will use that server's original</span> <span class=
    "c4">&lt;id&gt;</span><span>&#160;for the job. IOW, the</span>
    <span class="c4">&lt;id&gt;</span><span>&#160;of a job is
    always from the jobdb of the job's</span> <span class=
    "c4">&lt;siserver&gt;</span><span>.</span></li>

    <li class="c15 c3 c5"><span>An</span> <span class=
    "c4">&lt;id&gt;</span><span>&#160;value is never re-used for a
    different job once it has been used.</span></li>

    <li class="c15 c3 c5"><span>When a</span> <span class=
    "c4">&lt;periodic&gt;</span><span>&#160;job has finished, the
    next repetition of the job gets a new</span> <span class=
    "c4">&lt;id&gt;</span><span>.</span></li>

    <li class="c15 c3 c5"><span>When a</span> <span class=
    "c4">&lt;periodic&gt;</span><span>&#160;job has finished and
    the next repetition gets scheduled, both facts are communicated
    by</span> <span class=
    "c2">foreign_job_updates</span><span>&#160;(either in two
    separate messages or one combined message).</span></li>

    <li class="c3 c5 c15"><span>Two jobs with different</span>
    <span class="c4">&lt;id&gt;</span><span>&#160;are never treated
    as the same. In particular</span> <span class=
    "c2">foreign_job_updates</span><span>&#160;messages do not use
    the combination</span> <span class=
    "c4">&lt;headertag&gt;+&lt;macaddress&gt;</span><span>&#160;to
    identify jobs. This applies only to communication with other
    servers advertising "goSusi". When communicating with
    non-"goSusi" servers this behaviour is not
    required.</span></li>

    <li class="c15 c3 c5"><span>A corollary of the previous point
    is that a server that advertises "goSusi" is capable of
    managing multiple jobs with identical properties.</span></li>
  </ol>

  <p class="c3"><span class="c4">&lt;client&gt;</span></p>

  <p class="c3 c6"><span>Listening port and MAC address of a client
  registered at this server.</span></p>

  <p class="c3"><span class=
  "c4">&lt;macaddress&gt;</span><span>&#160;The sending
  server&#8217;s MAC address.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">gosa-si-server notes:</span></p>

  <p class="c3 c6"><span>gosa-si-server sends this message
  in</span> <span class=
  "c2">gosa-si-server:register_at_foreign_servers().</span></p>

  <p class="c3 c6"><span>gosa-si-server re-registers at all known
  other servers (not just from DNS but also those known from
  incoming messages) in regular intervals. go-susi doesn&#8217;t do
  that at this time.</span></p>

  <p class="c3"><span class="c4">go-susi notes:</span></p>

  <p class="c3 c6"><span>When go-susi starts, it will send this
  message to all servers listed in DNS for the service
  tcp/gosa-si.</span></p>

  <p class="c3 c6"><span>When go-susi receives a</span>
  <span class="c2">new_server</span><span>&#160;message it will
  send a</span> <span class=
  "c2">confirm_new_server</span><span>&#160;message to the server
  listed in &lt;source&gt; (usually the sender itself) and
  following</span> <span class=
  "c2">confirm_new_server</span><span>&#160;it will send its
  complete jobdb as a</span> <span class=
  "c2">foreign_job_updates</span><span>&#160;message. The latter
  behaviour is different from gosa-si which only sends</span>
  <span class="c2">confirm_new_server.</span></p>

  <p class="c3 c6"><span>When go-susi is contacting a peer server
  for the first time after being started, go-susi will consider the
  key it sends in the new_server message valid and will use it even
  before the peer replies with</span> <span class=
  "c2">confirm_new_server</span><span>. IOW the</span> <span class=
  "c2">confirm_new_server</span><span>&#160;message is not required
  in the case of go-susi.</span></p>

  <h3 class="c3"><a name="h.t6s5fv3aa5zt" id=
  "h.t6s5fv3aa5zt"></a><span>confirm_new_server</span></h3>

  <p class="c3"><span class="c4">Purpose:</span></p>

  <p class="c3 c6"><span>Server&#10132;Server. Same format
  as</span> <span class="c2">new_server</span><span>, except that
  the</span> <span class="c4">&lt;header&gt;</span><span>&#160;and
  the empty tag are</span> <span class=
  "c2">"confirm_new_server"</span><span>. When server A sends
  server B a</span> <span class=
  "c2">new_server</span><span>&#160;message containing server A's
  information, server B sends back (via a new connection) a</span>
  <span class="c2">confirm_new_server</span><span>&#160;message
  containing server B's information. After this exchange both
  servers have each other's data. The</span> <span class=
  "c2">confirm_new_server</span><span>&#160;message usually
  contains the same</span> <span class=
  "c4">&lt;key&gt;</span><span>&#160;as the new_server message. In
  any case the most recent</span> <span class=
  "c2">new_server/confirm_new_server
  message</span><span>&#160;</span><span class=
  "c7">received</span><span>&#160;(not</span> <span class=
  "c7">sent</span><span>!) determines the key used for those
  messages that are encrypted with a server-key (such as</span>
  <span class="c2">foreign_job_updates</span><span>).</span></p>
  <hr style="page-break-before:always;display:none;" />

  <h3 class="c3"><a name="h.d21gga45wxtz" id=
  "h.d21gga45wxtz"></a><span>foreign_job_updates</span></h3>

  <p class="c3"><span class="c4">Purpose:</span></p>

  <p class="c3 c6"><span>Server&#10132;Server. Inform another
  server about changes made to one or more jobs. This message is
  also used to cancel other servers&#8217; jobs by telling them the
  status is &#8220;done&#8221; (and periodic is "none"). The server
  that receives this message replaces the data of the job(s) with
  the new data.</span></p>

  <p class="c3"><span class="c4">Example message:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">foreign_job_updates</span><span class=
  "c0">&lt;/header&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">172.16.2.143:20081</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">172.16.2.60:20081</span><span class=
  "c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class="c0">&lt;sync&gt;</span><span class=
  "c2">ordered</span><span class="c0">&lt;/sync&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;answer1&gt;</span></p><a href="#" name="id.i03t6xrtz85y"
  id="id.i03t6xrtz85y"></a>

  <p class="c10 c3"><span class=
  "c0">&lt;plainname&gt;</span><span class=
  "c2">grisham</span><span class="c0">&lt;/plainname&gt;</span></p>

  <p class="c10 c3"><span class=
  "c0">&lt;progress&gt;</span><span class=
  "c2">none</span><span class="c0">&lt;/progress&gt;</span></p>

  <p class="c10 c3"><span class=
  "c0">&lt;status&gt;</span><span class=
  "c2">done</span><span class="c0">&lt;/status&gt;</span></p>

  <p class="c10 c3"><span class=
  "c0">&lt;periodic&gt;</span><span class=
  "c2">none</span><span class="c0">&lt;/periodic&gt;</span></p>

  <p class="c10 c3"><span class=
  "c0">&lt;siserver&gt;</span><span class=
  "c2">localhost</span><span class=
  "c0">&lt;/siserver&gt;</span><span class=
  "c2"><br /></span><span class=
  "c0">&lt;modified&gt;</span><span class="c2">1</span><span class=
  "c0">&lt;/modified&gt;</span></p>

  <p class="c10 c3"><span class=
  "c0">&lt;targettag&gt;</span><span class=
  "c2">00:0c:29:50:a3:52</span><span class=
  "c0">&lt;/targettag&gt;</span><span class=
  "c2"><br /></span><span class=
  "c0">&lt;macaddress&gt;</span><span class=
  "c2">00:0c:29:50:a3:52</span><span class=
  "c0">&lt;/macaddress&gt;</span><span class=
  "c2"><br /></span><span class=
  "c0">&lt;timestamp&gt;</span><span class=
  "c2">20120906164734</span><span class=
  "c0">&lt;/timestamp&gt;<br />
  &lt;id&gt;</span><span class="c2">4</span><span class=
  "c0">&lt;/id&gt;</span><span class="c2"><br /></span><span class=
  "c0">&lt;headertag&gt;</span><span class=
  "c2">trigger_action_wake</span><span class=
  "c0">&lt;/headertag&gt;</span><span class=
  "c2"><br /></span><span class=
  "c0">&lt;result&gt;</span><span class=
  "c2">none</span><span class="c0">&lt;/result&gt;</span><span class="c2"><br />
  </span><span class="c0">&lt;xmlmessage&gt;</span><span class=
  "c2">PHhtbD48aGVhZGVyPmpvYl90cmlnZ2VyX2Fjd</span></p>

  <p class="c10 c3"><span class=
  "c2">Glvbl93YWtlPC9oZWFkZXI+PHNvdXJjZT5HT1NBPC9zb3VyY2
  U+PHRhcmdldD4wMDowYzoyOTo1MDphMzo1MjwvdGFyZ2V0Pjx
  0aW1lc3RhbXA+MjAxMjA5MDYxNjQ3MzQ8L3RpbWVzdGFtcD48
  bWFjYWRkcmVzcz4wMDowYzoyOTo1MDphMzo1MjwvbWFjYWRkc</span></p>

  <p class="c10 c3"><span class=
  "c2">mVzcz48L3htbD4=</span><span class=
  "c0">&lt;/xmlmessage&gt;</span></p>

  <p class="c3 c5"><span class="c0">&lt;/answer1&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">The message elements have the
  following meaning:</span></p>

  <p class="c3"><span class=
  "c4">&lt;sync&gt;</span><span>&#160;</span><span class=
  "c7">(optional, unless the sender has &#8220;goSusi&#8221; in
  &lt;loaded_modules&gt;)</span></p>

  <p class="c3 c6"><span class="c2">"none" or not
  present</span></p>

  <p class="c3 c5"><span>The order in which</span> <span class=
  "c2">foreign_job_updates</span><span>&#160;messages are received
  and the order in which jobs are listed within a message may not
  reflect the order in which the changes were performed.</span></p>

  <p class="c3 c6"><span class="c2">"ordered"</span></p>

  <p class="c3 c5"><span>The sender ensures that</span>
  <span class="c2">foreign_job_updates</span><span>&#160;messages
  are received and jobs within them are listed in the same order in
  which the changes were performed. This synchronization is
  implemented by sending all</span> <span class=
  "c2">foreign_job_updates</span><span>&#160;messages properly
  ordered over a dedicated permanent connection.</span></p>

  <p class="c3 c6"><span class="c2">"all"</span></p>

  <p class="c3 c5"><span>The</span> <span class=
  "c2">foreign_job_updates</span><span>&#160;message contains a
  complete list of all jobs the sender is responsible for (i.e.
  where</span> <span class=
  "c4">&lt;siserver&gt;</span><span>&#160;is the sender). The
  receiver is expected to discard all old information about the
  sender&#8217;s jobs it has and replace it with the new
  data.</span></p>

  <p class="c3"><span class="c4">&lt;answerX&gt;</span></p>

  <p class="c3 c6"><span>Each job in the list has its own number X,
  counting from 1 with no numbers left out. Note that X is not
  identical to the</span> <span class=
  "c4">&lt;id&gt;</span><span>&#160;number.</span></p>

  <p class="c3"><span class="c4">&lt;id&gt;</span></p>

  <p class="c3 c6"><span>If the sending server does</span>
  <span class="c7">not</span><span>&#160;advertise "goSusi" in
  its</span> <span class=
  "c2">(confirm_)new_server</span><span>&#160;message, this number
  is the ID of the job in the</span> <span class=
  "c7">sending</span><span>&#160;server&#8217;s jobdb.</span></p>

  <p class="c3 c6"><span>If the sending server</span> <span class=
  "c7">does</span><span>&#160;advertise "goSusi" in its</span>
  <span class="c2">(confirm_)new_server</span><span>&#160;message,
  this number is the ID of the job in the</span> <span class=
  "c7">responsible</span><span>&#160;server&#8217;s jobdb (i.e. the
  jobdb of the job's</span> <span class=
  "c4">&lt;siserver&gt;</span><span>).</span></p>

  <p class="c3"><span class="c4">&lt;siserver&gt;</span></p>

  <p class="c3 c6"><span>The listen address (IP:port) of the server
  responsible for processing the job. When gosa-si-server sends
  this message, this can also be the word &#8220;localhost&#8221;
  (and go-susi treats this as alias for the address from</span>
  <span class="c4">&lt;source&gt;</span><span>).</span></p>

  <p class="c3"><span class="c4">&lt;periodic&gt;</span></p>

  <p class="c3 c6"><span>If the</span> <span class=
  "c2">foreign_job_updates</span><span>&#160;was sent as a result
  of</span> <span class="c2">gosa_delete_jobdb_entry</span><span>,
  then</span> <span class=
  "c4">&lt;periodic&gt;</span><span>&#160;is always "none" or not
  present, even if the job started out as periodic.</span></p>

  <p class="c3"><span class=
  "c4">&lt;modified&gt;</span><span>&#160;always 1.</span></p>

  <p class="c3"><span class=
  "c4">&lt;macaddress&gt;+&lt;headertag&gt;</span></p>

  <p class="c3 c6"><span>gosa-si-server uses this pair as the key
  to uniquely identify a job. This means that the job database of a
  gosa-si-server can only contain one job type per MAC address. If
  the jobdb already contains an entry for the</span><span class=
  "c4">&#160;&lt;macaddress&gt;+&lt;headertag&gt;</span><span>&#160;pair
  from the</span> <span class=
  "c2">foreign_job_updates</span><span>&#160;message, that entry
  will be updated. Otherwise a new entry will be added to the
  jobdb.</span></p>

  <p class="c3 c6"><span>gosa-si-server treats</span> <span class=
  "c4">&lt;macaddress&gt;</span><span>&#160;as case-sensitive and
  will not process</span> <span class=
  "c2">foreign_job_updates</span><span>&#160;correctly if the case
  in the message does not match the case in its
  database.</span></p>

  <p class="c3 c6"><span>go-susi uses</span> <span class=
  "c4">&lt;id&gt;</span><span>&#160;to uniquely identify a job and
  permits multiple jobs with the same</span> <span class=
  "c4">&lt;macaddress&gt;+&lt;headertag&gt;</span><span>&#160;to
  coexist. When go-susi evaluates</span> <span class=
  "c2">foreign_job_updates</span><span>&#160;from a gosa-si-server,
  however, it will fall back to gosa-si-server's
  behaviour.</span></p>

  <p class="c3"><span class="c4">&lt;xmlmessage&gt;</span></p>

  <p class="c3 c6"><span>Base64-encoded &lt;xml&gt;...&lt;/xml&gt;
  message that was used to create the job originally.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">gosa-si-server notes:</span></p>

  <p class="c3 c6"><span>This message is handled in</span>
  <span class=
  "c2">events/server_server_com.pm:foreign_job_updates().</span></p>

  <p class="c3 c6"><span class=
  "c4">&lt;xmlmessage&gt;</span><span>&#160;may include whitespace
  characters in the base64-string that need to be removed before
  the string will decode properly.</span></p>

  <p class="c3 c6"><span>gosa-si treats</span> <span class=
  "c4">&lt;macaddress&gt;</span><span>&#160;as case-sensitive and
  will not process</span> <span class=
  "c2">foreign_job_updates</span><span>&#160;correctly if the case
  in the message does not match the case in its
  database.</span></p>

  <p class="c3"><span class="c4">go-susi notes:</span></p>

  <p class="c3 c6"><span class=
  "c4">&lt;sync&gt;</span><span>&#160;is a go-susi
  extension.</span></p>

  <p class="c3 c6"><span>gosa-si-server sends</span> <span class=
  "c4">&lt;xmlmessage&gt;</span><span>&#160;to itself (replacing
  "job_" with "gosa_" in the &lt;header&gt;) when the job's time
  has come. This means that in case of an inconsistency
  between</span> <span class=
  "c4">&lt;xmlmessage&gt;</span><span>&#160;and the job's
  data,</span> <span class=
  "c4">&lt;xmlmessage&gt;</span><span>&#160;wins. go-susi does not
  use</span> <span class="c4">&lt;xmlmessage&gt;</span><span>, so
  in case of an inconsistency go-susi will go by the job's
  data.</span></p>
  <hr style="page-break-before:always;display:none;" />

  <h3 class="c3"><a name="h.4o43ycaft42x" id=
  "h.4o43ycaft42x"></a><span>new_foreign_client</span></h3>

  <p class="c3"><span class="c4">Purpose:</span></p>

  <p class="c3 c6"><span>Server&#10132;Server. When a client
  registers at a server using</span> <span class=
  "c2">here_i_am</span><span>, that server notifies its peers of
  the new client by sending a</span> <span class=
  "c2">new_foreign_client</span><span>&#160;message.</span></p>

  <p class="c1"></p>

  <p class="c3"><span class="c4">Example message:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">new_foreign_client</span><span class=
  "c0">&lt;/header&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">172.16.2.19:20081</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">172.16.2.60:20081</span><span class=
  "c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;client&gt;</span><span class=
  "c2">172.16.2.143:20083</span><span class=
  "c0">&lt;/client&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;macaddress&gt;</span><span class=
  "c2">00:45:6e:00:03:01</span><span class=
  "c0">&lt;/macaddress&gt;</span></p>

  <p class="c3 c5"><span class="c0">&lt;key&gt;</span><span class=
  "c2">current_client_key</span><span class=
  "c0">&lt;/key&gt;</span></p>

  <p class="c3 c5"><span class="c0">&lt;key&gt;</span><span class=
  "c2">previous_client_key</span><span class=
  "c0">&lt;/key&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;new_foreign_client&gt;&lt;/new_foreign_client&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">The message elements have the
  following meaning:</span></p>

  <p class="c3 c6"><span>The</span> <span class=
  "c4">&lt;macaddress&gt;</span><span>&#160;and</span> <span class=
  "c4">&lt;client&gt;</span><span>&#160;elements identify the
  client. The</span> <span class=
  "c4">&lt;key&gt;</span><span>&#160;elements, if present, specify
  the most recent and the previous encryption key sent by the
  client via</span> <span class=
  "c2">here_i_am</span><span>&#160;or</span> <span class=
  "c2">new_key</span><span>. The</span> <span class=
  "c4">&lt;key&gt;</span><span>&#160;elements are go-susi specific
  and not sent by gosa-si-server.</span></p>

  <p class="c3 c6"><span>Note that even with the client's key a
  foreign server can not contact that client successfully, because
  gosa-si-client discards messages whose origin is not the
  si-server it is registered at.</span></p>
  <hr style="page-break-before:always;display:none;" />

  <h3 class="c3"><a name="h.z3ec199pha6w" id=
  "h.z3ec199pha6w"></a><span>trigger_wake</span></h3>

  <p class="c3"><span class="c4">Purpose:</span></p>

  <p class="c3 c6"><span>Server&#10132;Server. Ask a peer server
  for help in waking up a machine.</span></p>

  <p class="c1"></p>

  <p class="c3"><span class="c4">Example message:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">trigger_wake</span><span class=
  "c0">&lt;/header&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">172.16.2.143:20081</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">172.16.2.60:20081</span><span class=
  "c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;macaddress&gt;</span><span class=
  "c2">00:45:6e:00:03:01</span><span class=
  "c0">&lt;/macaddress&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;trigger_wake&gt;&lt;/trigger_wake&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">The message elements have the
  following meaning:</span></p>

  <p class="c3 c6"><span>The</span> <span class=
  "c4">&lt;macaddress&gt;</span><span>&#160;identifies the machine
  to be woken up. The other elements have their usual meanings. The
  empty</span> <span class=
  "c4">&lt;trigger_wake&gt;</span><span>&#160;element is always
  empty.</span></p>
  <hr style="page-break-before:always;display:none;" />
  <a href="#" name="id.lcwii6oc1qwv" id="id.lcwii6oc1qwv"></a>

  <h2 class="c3"><a name="h.w73b9qoqu5cg" id=
  "h.w73b9qoqu5cg"></a><span>Client - Server</span></h2>

  <p class="c3"><span>When an si-client starts up, it checks its
  configuration as well as DNS and assembles a list of available
  si-servers. It will then send a</span> <span class=
  "c2">here_i_am</span><span>&#160;message to the first server on
  the list. If it receives a</span> <span class=
  "c2">registered</span><span>&#160;message from the server within
  a certain amount of time (typically 10s), the client and that
  server are paired and have a shared encryption key that they will
  use for all future communications.</span></p>

  <p class="c3"><span>If no</span> <span class=
  "c2">registered</span><span>&#160;message is received from the
  server within the time window, the client will send a</span>
  <span class="c2">here_i_am</span><span>&#160;to the next server
  on the list and will keep on going through the server list until
  a server manages to answer within the time window. This behaviour
  can lead to the absurd situation that all servers on the list are
  available and do answer but registration fails anyway because
  delays cause all of the answers to miss the time
  window.</span></p>

  <p class="c3"><span>From time to time the client will send
  a</span> <span class="c2">new_key</span><span>&#160;message to
  the server to establish a new encryption key to be used for
  future messages between the two parties. While this does not make
  the stupid homegrown encryption protocol used by gosa-si secure,
  it does cause race conditions because the client simply starts
  using the new key right away, even though the server may not have
  processed the</span> <span class="c2">new_key</span><span>,
  yet.</span></p>

  <p class="c3"><span>What happens after the server has sent
  the</span> <span class="c2">registered</span><span>&#160;message
  to the client depends on whether an LDAP object exists for the
  client's system or not. If there is an LDAP object, the server
  will read its data and data from</span> <span class=
  "c2">gosaGroupOfNames</span><span>&#160;it is a member of and
  will send corresponding</span> <span class="c2">new_ldap_config,
  new_ntp_config</span><span>&#160;and</span> <span class=
  "c2">new_syslog_config</span><span>&#160;messages to the
  client.</span></p>

  <p class="c3"><span>If there is no LDAP object for the client,
  the server sends a</span> <span class=
  "c2">detect_hardware</span><span>&#160;message and creates an
  installation job with</span> <span class=
  "c2">&lt;progress&gt;hardware-detection&lt;/progress&gt;</span><span>&#160;for
  the new system. The client then performs hardware detection and
  sends the results back to the server in a</span> <span class=
  "c2">detected_hardware</span><span>&#160;message. The server uses
  that information to create an LDAP object. If a matching template
  object exists (go-susi extension, see</span> <span class=
  "c2">detected_hardware</span><span>&#160;for details), the result
  is a complete system object. Otherwise it is an incomplete object
  in</span> <span class="c2">ou=incoming</span><span>&#160;that
  needs to be completed in GOsa.</span></p>

  <p class="c3"><span>Once the object has been completed, the
  server sends the available information to the client in</span>
  <span class="c2">new_ldap_config,
  new_ntp_config</span><span>&#160;and</span> <span class=
  "c2">new_syslog_config</span><span>&#160;messages. And when
  the</span> <span class=
  "c2">gotoMode</span><span>&#160;becomes</span> <span class=
  "c2">active</span><span>, the server sends</span> <span class=
  "c2">set_activated_for_installation.</span><span>&#160;It is only
  after the client has received both</span> <span class=
  "c2">new_ldap_config</span><span>&#160;and</span> <span class=
  "c2">set_activated_for_installation</span><span>&#160;that it can
  begin the actual installation process. A variety of message types
  may occur during an installation or softupdate. These are
  explained in their own chapter of this manual.</span></p>

  <p class="c3"><span>Whenever a server starts executing a job that
  affects a client, it will send that client a</span> <span class=
  "c2">trigger_action_*</span><span>&#160;message. Depending on the
  kind of job the client may react to this by e.g. presenting a
  popup to a logged in user asking the user to log out.</span></p>

  <p class="c3"><span>Jobs of type</span> <span class=
  "c2">job_send_user_msg</span><span>&#160;have their own
  associated client-server messages but go-susi does not support
  these. See the chapter on deprecated messages later in this
  manual.</span></p>
  <hr style="page-break-before:always;display:none;" />

  <h3 class="c3"><a name="h.w909y3vom7bh" id=
  "h.w909y3vom7bh"></a><span>here_i_am</span></h3>

  <p class="c3"><span class="c4">Purpose:</span></p>

  <p class="c3 c6"><span>Client&#10132;Server.</span> <span>Used by
  an si-client to register at the si-server responsible for it. The
  si-server reacts by sending a</span> <span class=
  "c2">registered</span><span>&#160;message followed by one or more
  of the following:</span></p>

  <p class="c1"></p>

  <ol class="c12" start="1">
    <li class="c15 c3 c5"><span>a</span> <span class=
    "c2">new_ldap_config</span><span>&#160;message to tell the
    client which LDAP parameters it should use.</span></li>

    <li class="c15 c3 c5"><span>a</span> <span class=
    "c2">detect_hardware</span><span>&#160;message to instruct the
    client to perform hardware detection.</span></li>

    <li class="c15 c3 c5"><span>a</span> <span class=
    "c2">new_ntp_config</span><span>&#160;message to tell the
    client which NTP server(s) to use.</span></li>

    <li class="c15 c3 c5"><span>a</span> <span class=
    "c2">new_syslog_config</span><span>&#160;message to tell the
    client which syslog server to use.</span></li>
  </ol>

  <p class="c3 c8"></p>

  <p class="c3 c6"><span>A client to be (re)installed will not
  start the installation until it has received the replies to
  its</span> <span class="c2">here_i_am</span><span>&#160;message
  from the server from which it is installing. In other situations
  (e.g. normal booting) the client will, if it does not receive the
  reply messages after a few seconds, try to register at each
  si-server listed in DNS.</span></p>

  <p class="c3 c6"><span>The</span> <span class=
  "c2">here_i_am</span><span>&#160;message is also responsible for
  setting the encryption key the si-server should use to encrypt
  messages sent to the client (such as</span> <span class=
  "c2">new_ldap_config).</span></p>

  <p class="c3 c6"><span>When a client has successfully registered
  at a server, the server sends out</span> <span class=
  "c2">new_foreign_client</span><span>&#160;messages to its
  peers.</span></p>

  <p class="c3 c6"><span>The new client will also appear in future
  (</span><span class=
  "c2">confirm_</span><span>)</span><span class="c2">new_server</span><span>&#160;messages
  sent by the server.</span></p>

  <p class="c3 c6"><span>If the server can find the client in LDAP
  by its MAC address, it will also update the ipHostNumber
  field.</span></p>

  <p class="c3 c6"><span>If the sending client does not exist in
  LDAP, a reinstall job will automatically be created with</span>
  <span class=
  "c4">&lt;progress&gt;</span><span>hardware-detection</span><span class="c4">&lt;/progress&gt;</span>
  <span>and</span> <span class=
  "c4">&lt;status&gt;</span><span>processing</span><span class=
  "c4">&lt;/status&gt;</span><span>&#160;and the</span>
  <span class="c2">detect_hardware</span> <span>message will be
  sent to the client.</span></p>

  <p class="c3"><span class="c4">Example message:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">here_i_am</span><span class="c0">&lt;/header&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">172.16.2.146:20083</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">172.16.2.143:20081</span><span class=
  "c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;here_i_am&gt;&lt;/here_i_am&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;mac_address&gt;</span><span class=
  "c2">00:0c:29:50:a3:52</span><span class=
  "c0">&lt;/mac_address&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;new_passwd&gt;</span><span class=
  "c2">qXBaZCnDgKMhvDULAD0ltWdfk9kHdnl</span><span class=
  "c0">&lt;/new_passwd&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;key_lifetime&gt;</span><span class=
  "c2">600</span><span class="c0">&lt;/key_lifetime&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;client_revision&gt;</span><span class=
  "c2">20926</span><span class=
  "c0">&lt;/client_revision&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;client_status&gt;</span><span class=
  "c2">stable</span><span class=
  "c0">&lt;/client_status&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;gotoHardwareChecksum&gt;</span><span class=
  "c2">qQvNNtPqaV5MG8UElNS7g</span><span class=
  "c0">&lt;/gotoHardwareChecksum&gt;</span></p>

  <p class="c3 c5"><span class="c0">&lt;events&gt;</span></p>

  <p class="c10 c3"><span class=
  "c2">trigger_action_localboot,trigger_action_reboot,</span></p>

  <p class="c10 c3"><span class=
  "c2">confirm_new_key,mailqueue_requeue,import_events,usr_msg,</span></p>

  <p class="c10 c3"><span class=
  "c2">new_syslog_config,generate_hw_digest,get_events,</span></p>

  <p class="c10 c3"><span class=
  "c2">new_ntp_config,mailqueue_del,trigger_action_faireboot,</span></p>

  <p class="c10 c3"><span class=
  "c2">new_key,registered,mailqueue_header,trigger_action_reinstall,</span></p>

  <p class="c10 c3"><span class=
  "c2">new_ldap_config,trigger_action_instant_update,mailqueue_hold,</span></p>

  <p class="c10 c3"><span class=
  "c2">set_activated_for_installation,detect_hardware,</span></p>

  <p class="c10 c3"><span class=
  "c2">trigger_action_update,ping,mailqueue_unhold,</span></p>

  <p class="c10 c3"><span class=
  "c2">mailqueue_query,trigger_goto_settings_reload,</span></p>

  <p class="c10 c3"><span class="c2">trigger_action_halt</span></p>

  <p class="c3 c5"><span class="c0">&lt;/events&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">The message elements have the
  following meaning:</span></p>

  <p class="c3"><span class="c4">&lt;mac_address&gt;</span></p>

  <p class="c3 c6"><span>The sending client's MAC address.</span>
  <span class="c4">Note:</span><span>&#160;The tag has an
  underscore in its name unlike the MAC address elements in other
  messages.</span></p>

  <p class="c3"><span class="c4">&lt;new_passwd&gt;</span></p>

  <p class="c3 c6"><span>The client equivalent to the</span>
  <span class="c4">&lt;key&gt;</span><span>&#160;element of</span>
  <span class="c2">new_server</span><span>&#160;messages. The
  receiving server will use this key to encrypt messages to the
  client.</span></p>

  <p class="c3"><span class="c4">&lt;key_lifetime&gt;</span></p>

  <p class="c3 c6"><span>Number of seconds the key is valid. The
  client will send a</span> <span class=
  "c2">new_key</span><span>&#160;message in intervals of this many
  seconds (Some versions of gosa-si-client don&#8217;t do this
  because of bugs. They keep using the same key
  indefinitely).</span></p>

  <p class="c3"><span class=
  "c4">&lt;client_revision&gt;</span><span>/</span><span class=
  "c4">&lt;client_status&gt;</span><span>&#160;Version information
  about the client.</span></p>

  <p class="c3"><span class=
  "c4">&lt;gotoHardwareChecksum&gt;</span><span>&#160;A digest
  generated based on the machine hardware.</span></p>

  <p class="c3"><span class=
  "c4">&lt;events&gt;</span><span>&#160;The set of messages the
  client understands.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">go-susi notes:</span></p>

  <p class="c3 c6"><span>go-susi updates the system&#8217;s</span>
  <span class="c2">ipHostNumber</span><span>&#160;field when it
  receives this message. If the system&#8217;s</span> <span class=
  "c2">cn</span><span>&#160;does not match the long or short name
  of the reverse lookup of its IP, the object will be renamed to
  match the DNS name.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">gosa-si-client notes:</span></p>

  <p class="c3 c6"><span>gosa-si-client internally manages a
  list</span> <span class="c2">@servers</span><span>&#160;that it
  will contact in turn with</span> <span class=
  "c2">here_i_am</span><span>&#160;until it receives a</span>
  <span class="c2">registered</span><span>&#160;response within a
  certain reply time. If gosa-si-client receives a message that it
  cannot decode, it will re-register, however, it will do so at the
  next server in the list instead of starting at the beginning
  again.</span></p>
  <hr style="page-break-before:always;display:none;" />

  <h3 class="c3"><a name="h.uw29iuabpm6q" id=
  "h.uw29iuabpm6q"></a><span>new_key</span></h3>

  <p class="c3"><span class="c4">Purpose:</span></p>

  <p class="c3 c6"><span>Client&#10132;Server. Informs the server
  about a new encryption key to be used when communicating with the
  sending client.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">Example message:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">new_key</span><span class="c0">&lt;/header&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">172.16.2.146:20083</span><span class=
  "c0">&lt;/source&gt;</span><span class=
  "c2">&#160;</span><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">172.16.2.143:20081</span><span class=
  "c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;new_key&gt;</span><span class=
  "c2">edLDBiajQownOirf424zKFOyG4AlrP7</span><span class=
  "c0">&lt;/new_key&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>
  <hr style="page-break-before:always;display:none;" />

  <h3 class="c3"><a name="h.w5skplmpyja8" id=
  "h.w5skplmpyja8"></a><span>registered</span></h3>

  <p class="c3"><span class="c4">Purpose:</span></p>

  <p class="c3 c6"><span>Server&#10132;Client. Sent in</span>
  <span>reaction to a client&#8217;s</span> <span class=
  "c2">here_i_am</span><span>&#160;message.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">Example message:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">registered</span><span class="c0">&lt;/header&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">172.16.2.143:20081</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">172.16.2.106:20083</span><span class=
  "c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;ldap_available&gt;</span><span class=
  "c2">true</span><span class=
  "c0">&lt;/ldap_available&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;registered&gt;&lt;/registered&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">The message elements have the
  following meaning:</span></p>

  <p class="c3"><span class="c4">&lt;ldap_available&gt;</span></p>

  <p class="c3 c6"><span>If this is present and</span> <span class=
  "c2">true</span><span>&#160;it tells the client that it will get
  a</span> <span class=
  "c2">new_ldap_config</span><span>&#160;message. If the element is
  absent or</span> <span class="c2">false</span><span>, this means
  that no LDAP information is available and the client will not
  receive a</span> <span class=
  "c2">new_ldap_config</span><span>&#160;message until its LDAP
  object has been created (usually after hardware detection). If
  this element is sent as</span> <span class=
  "c2">true</span><span>&#160;and not followed up with a</span>
  <span class="c2">new_ldap_config</span><span>, the installation
  will not properly display the message &#8220;System is locked.
  Waiting for activation.&#8221;</span></p>
  <hr style="page-break-before:always;display:none;" />

  <h3 class="c3"><a name="h.l3p6rg78vgh1" id=
  "h.l3p6rg78vgh1"></a><span>new_ldap_config</span></h3>

  <p class="c3"><span class="c4">Purpose:</span></p>

  <p class="c3 c6"><span>Server&#10132;Client.
  Sends</span><span>&#160;various LDAP-related information to the
  client. This message is not sent until the client object has been
  properly created.</span></p>

  <p class="c3"><span class="c4">Note:</span></p>

  <p class="c3 c6"><span>When go-susi</span> <span class=
  "c7">receives</span><span>&#160;this message, it will call</span>
  <span class=
  "c2">[general]/new-config-hook</span><span>.</span></p>

  <p class="c3"><span class="c4">Example message:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">new_ldap_config</span><span class="c0">&lt;/header&gt;
  &#160;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">172.16.2.143:20081</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">172.16.2.106:20083</span><span class="c0">&lt;/target&gt;
  &#160;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;admin_base&gt;</span><span class=
  "c2">ou=Direktorium,o=go-susi,c=de</span><span class=
  "c0">&lt;/admin_base&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;department&gt;</span><span class=
  "c2">Direktorium</span><span class=
  "c0">&lt;/department&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;ldap_base&gt;</span><span class=
  "c2">ou=Direktorium,o=go-susi,c=de</span><span class=
  "c0">&lt;/ldap_base&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;ldap_uri&gt;</span><span class=
  "c2">ldap://ldap01.example.de</span><span class=
  "c0">&lt;/ldap_uri&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;ldap_uri&gt;</span><span class=
  "c2">ldap://ldap02.example.de</span><span class=
  "c0">&lt;/ldap_uri&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;release&gt;</span><span class=
  "c2">halut/2.4.0</span><span class=
  "c0">&lt;/release&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;unit_tag&gt;</span><span class=
  "c2">1154342234048479900</span><span class=
  "c0">&lt;/unit_tag&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;new_ldap_config&gt;&lt;/new_ldap_config&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">The message elements have the
  following meaning:</span></p>

  <p class="c3"><span class="c0">&lt;release&gt;</span><span class=
  "c2 c7">&#160;</span><span class="c7">(optional)</span></p>

  <p class="c3 c6"><span>The release the client should have
  according to LDAP if known.</span></p>

  <p class="c3"><span class=
  "c0">&lt;ldap_uri&gt;</span><span>&#160;</span><span class=
  "c7">(1 or more)</span></p>

  <p class="c3 c6"><span>The LDAP server(s) from which the client
  should read its data. All listed LDAP servers contain the same
  data with respect to the client system&#8217;s object but may
  differ in other ways. In general the client should use the
  first</span> <span class=
  "c0">&lt;ldap_uri&gt;</span><span>&#160;and only fall back to
  trying the others if the first is not available.</span></p>

  <p class="c3"><span class="c0">&lt;ldap_base&gt;</span></p>

  <p class="c3 c6"><span>The base under which the client should
  look for its data. There is only 1</span> <span class=
  "c0">&lt;ldap_base&gt;</span><span>&#160;element even if there
  are multiple</span> <span class=
  "c0">&lt;ldap_uri&gt;</span><span>&#160;elements.</span></p>

  <p class="c3"><span class="c0">&lt;unit_tag&gt;
  &#160;</span><span class="c7">(only present when unit tags are
  used)</span> <span>The unit tag for the client.</span></p>

  <p class="c3"><span class=
  "c0">&lt;admin_base&gt;</span><span class="c7">(only present when
  unit tags are used)</span></p>

  <p class="c3 c6"><span>The dn of the admin base object. This is
  the first object under the</span> <span class=
  "c4">&lt;ldap_base&gt;</span><span>&#160;that matches</span>
  <span class=
  "c2">(&amp;(objectClass=gosaAdministrativeUnit)(gosaUnitTag=...)).</span><span>&#160;Typically
  this is the same as the</span> <span class=
  "c4">&lt;ldap_base&gt;</span><span>.</span></p>

  <p class="c3"><span class=
  "c0">&lt;department&gt;</span><span class="c7">(only present when
  unit tags are used)</span><span>&#160;The ou attribute of the
  admin base object.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">gosa-si-server notes:</span></p>

  <p class="c3 c6"><span class=
  "c2">modules/ClientPackages.pm:new_ldap_config()</span>
  <span>contains the code that constructs this message. When the
  system is activated for installation, the</span> <span class=
  "c2">set_activated_for_installation</span><span>&#160;message
  will always be followed by</span> <span class=
  "c2">new_ldap_config</span><span>. This seems like a race
  condition. I think it would be better to send the</span>
  <span class="c2">new_ldap_config</span><span>&#160;beforehand. In
  practice this is not a problem with gosa-si-server because it
  seems to send the LDAP config once before and once after
  the</span> <span class=
  "c2">set_activated_for_installation</span><span>&#160;however I
  believe that the data sent before reflects only a default choice
  and may not be current if the LDAP server is changed in GOsa for
  a new system.</span></p>

  <h3 class="c3"><a name="h.gprzmis7xdu9" id=
  "h.gprzmis7xdu9"></a><span>new_ntp_config</span></h3>

  <p class="c3"><span class="c4">Purpose:</span></p>

  <p class="c3 c6"><span>Server&#10132;Client. Tells the client
  which NTP server(s) to use.</span></p>

  <p class="c3"><span class="c4">Note:</span></p>

  <p class="c3 c6"><span>When go-susi</span> <span class=
  "c7">receives</span><span>&#160;this message, it will call</span>
  <span class=
  "c2">[general]/new-config-hook</span><span>.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">Example message:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">new_ntp_config</span><span class="c0">&lt;/header&gt;
  &#160;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">172.16.2.143:20081</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">172.16.2.106:20083</span><span class=
  "c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;server&gt;</span><span class=
  "c2">pool.ntp.org</span><span class=
  "c0">&lt;/server&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;server&gt;</span><span class=
  "c2">ntp.example.org</span><span class=
  "c0">&lt;/server&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;new_ntp_config&gt;&lt;/new_ntp_config&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">The message elements have the
  following meaning:</span></p>

  <p class="c3 c6"><span class=
  "c4">&lt;server&gt;</span><span>&#160;(1 or more) NTP server(s)
  to use.</span></p>
  <hr style="page-break-before:always;display:none;" />

  <h3 class="c3"><a name="h.hoqs75a5zaxq" id=
  "h.hoqs75a5zaxq"></a><span>detect_hardware</span></h3>

  <p class="c3"><span class="c4">Purpose:</span></p>

  <p class="c3 c6"><span>Server&#10132;Client. Wh</span><span>en
  the server receives a</span> <span class=
  "c2">here_i_am</span><span>&#160;message with a MAC address for
  which no GOhard object can be found in LDAP, the server sends
  a</span> <span class=
  "c2">detecT_hardware</span><span>&#160;message. The client reacts
  to this message by performing hardware detection and sends
  a</span> <span class=
  "c2">detecTED_hardware</span><span>&#160;message to the server.
  The server then creates the LDAP object with that
  data.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">Example message:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">detect_hardware</span><span class="c0">&lt;/header&gt;
  &#160;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">172.16.2.143:20081</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">172.16.2.146:20083</span><span class=
  "c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;detect_hardware&gt;&lt;/detect_hardware&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>
  <hr style="page-break-before:always;display:none;" />

  <h3 class="c3"><a name="h.ylkn6o4e9qjp" id=
  "h.ylkn6o4e9qjp"></a><span>detected_hardware</span></h3>

  <p class="c3"><span class="c4">Purpose:</span></p>

  <p class="c3 c6"><span>Client&#10132;Server. When the server
  receives a</span> <span class=
  "c2">here_i_am</span><span>&#160;message with a MAC address for
  which no GOhard object exists in LDAP , the server sends a</span>
  <span class="c2">detecT_hardware</span><span>&#160;message to the
  client. The client reacts to this message by performing hardware
  detection and sends a</span> <span class=
  "c2">detecTED_hardware</span><span>&#160;message to the server.
  The server then creates the LDAP object with that data. If
  a</span> <span class=
  "c2">detecTED_hardware</span><span>&#160;message is received for
  a system whose MAC address is found in LDAP, then that system's
  LDAP object will be updated with the new info.</span></p>

  <p class="c3"><span class="c4">go-susi extension:</span></p>

  <p class="c3 c6"><span>go-susi extends the usage of</span>
  <span class="c2">detected_hardware</span><span>&#160;to permit
  any kind of creation, modification and even moving of system
  objects within the LDAP tree, even without prior use of</span>
  <span class="c2">here_i_am</span><span>. See the go-susi note
  further below for more information.</span></p>

  <p class="c3"><span class="c4">Template objects:</span></p>

  <p class="c3 c6"><span>The data from the</span> <span class=
  "c2">detected_hardware</span><span>&#160;message is not enough to
  create a complete system object that is ready for installation.
  This means that usually further action is necessary in GOsa to
  provide the remaining data before the installation can begin. To
  allow for fully automatic installation, go-susi has the ability
  to complement the</span> <span class=
  "c2">detected_hardware</span><span>&#160;data with data copied
  from a template object.</span></p>

  <p class="c3 c6"><span>Whenever go-susi receives a</span>
  <span class="c2">detected_hardware</span><span>&#160;message for
  a system that does not yet exist in LDAP, go-susi will search for
  template objects which are objects that have</span> <span class=
  "c2">objectClass=GOHard</span><span>&#160;and a</span>
  <span class="c2">goComment</span><span>&#160;attribute that
  starts with "</span><span class="c2">Template for</span><span>".
  The remainder of the</span> <span class=
  "c2">goComment</span><span>&#160;is taken as a matching rule as
  described below. If the rule matches against the attributes of
  the new system that are known so far, then the other attributes
  are copied from the template object.</span></p>

  <p class="c3"><span class="c4">Template objects that are group
  members:</span></p>

  <p class="c3 c6"><span>If the template object is</span>
  <span class="c2">member</span><span>&#160;of any object groups
  (</span><span class=
  "c2">objectClass=gosaGroupOfNames</span><span>), then &#160;the
  new system will be added to the same groups.</span></p>

  <p class="c3"><span class="c4">Auto-activation for immediate
  installation:</span></p>

  <p class="c3 c6"><span>If the template object has</span>
  <span class="c2">gotoMode=active</span><span>, then the new
  system will be activated and installation will commence
  immediately.</span></p>

  <p class="c3"><span class="c4">Object creation not in</span>
  <span class="c0">ou=incoming</span><span class="c4">:</span></p>

  <p class="c3 c6"><span>The &#160;new system's LDAP object will be
  placed in the same LDAP path as the template object from which it
  copies attributes. Template objects are allowed to be but don't
  need to be in</span> <span class=
  "c2">ou=incoming</span><span>.</span></p>

  <p class="c3"><span class="c4">Matching rule language:</span></p>

  <p class="c3 c6"><span>A matching rule consists of one or more
  parts, optionally separated by whitespace. Each part can have one
  of the following 2 forms:</span></p>

  <p class="c3 c6"><span class="c2">attributeName =~
  /regex/</span></p>

  <p class="c3 c5"><span>matches if the system has at least an
  attribute named</span> <span class=
  "c2">attributeName</span><span>&#160;with at least one value that
  matches the given regex. This is a non-anchored match. If you
  want the match to be anchored you need to specifically
  include</span> <span class="c2">^</span><span>&#160;and/or</span>
  <span class="c2">$</span> <span>in the regex.</span></p>

  <p class="c3 c5"><span>As a special case the regex</span>
  <span class="c2">/^$/</span><span>&#160;matches if the system has
  no attribute</span> <span class=
  "c2">attributeName</span><span>.</span></p>

  <p class="c3 c6"><span class="c2">attributeName !~
  /regex/</span></p>

  <p class="c3 c5"><span>matches if none of the system's values for
  the attribute named</span> <span class=
  "c2">attributeName</span><span>&#160;match the given regex. If
  the system has no attribute of that name this will be treated as
  if it had such an attribute with an empty string as
  value.</span></p>

  <p class="c3 c6"><span>The regex syntax is described
  here:</span><span><a class="c9" href=
  "https://code.google.com/p/re2/wiki/Syntax">&#160;</a></span><span class="c11"><a class="c9"
  href=
  "https://code.google.com/p/re2/wiki/Syntax">https://code.google.com/p/re2/wiki/Syntax</a></span></p>

  <p class="c3 c6"><span>Whitespace note: Every sequence of
  whitespace characters in regexes is converted to
  "</span><span class="c2">\s+</span><span>", so a simple space
  represents any kind of whitespace. Note that this breaks some
  things like "</span><span class="c2">[^ ]</span><span>".
  Use</span> <span class="c2">\x20</span><span>&#160;if you need to
  explicitly match a space.</span></p>

  <p class="c3"><span class="c4">Matching process:</span></p>

  <p class="c3 c6"><span>The matching rule is divided into groups
  of subsequent parts of the same type (i.e.</span><span class=
  "c2">&#160;=~</span><span>&#160;or</span> <span class=
  "c2">!~</span><span>).</span></p>

  <p class="c3 c6"><span>From each</span> <span class=
  "c2">=~</span><span>&#160;group the system must match at least
  one part.</span></p>

  <p class="c3 c6"><span>From each</span> <span class=
  "c2">!~</span><span>&#160;group the system must match all parts
  (i.e. it must not match any of the regexes).</span></p>

  <p class="c3 c6"><span class="c4">Example:</span></p>

  <p class="c3 c5"><span class="c2">cn=~/foo/ cn=~/bar/ cn!~/fool/
  cn!~/barstool/ cn=~/moo/</span></p>

  <p class="c3 c5"><span>matches</span> <span class=
  "c2">cn=foomoo</span></p>

  <p class="c3 c5"><span>matches</span> <span class=
  "c2">cn=moobar</span></p>

  <p class="c3 c5"><span>does not match</span> <span class=
  "c2">cn=foo</span><span>&#160;(the "</span><span class=
  "c2">moo</span><span>" from the 2nd</span> <span class=
  "c2">=~</span><span>&#160;group is missing)</span></p>

  <p class="c3 c5"><span>does not match</span> <span class=
  "c2">cn=moofoolish</span><span>&#160;(forbidden by</span>
  <span class="c2">cn!~/fool/</span><span>)</span></p>

  <p class="c3 c5"><span>does not match</span> <span class=
  "c2">cn=barstoolmoo</span><span>&#160;(forbidden by</span>
  <span class="c2">cn!~/barstool/</span><span>)</span></p>

  <p class="c3 c5"><span>does not match</span> <span class=
  "c2">cn=moo</span><span>&#160;(needs "</span><span class=
  "c2">foo</span><span>" or "</span><span class=
  "c2">bar</span><span>" from the 1st</span> <span class=
  "c2">=~</span><span>&#160;group)</span></p>

  <p class="c3 c5"><span>matches</span> <span class=
  "c2">cn=foobarmoomoo</span><span>&#160;(multiple matches from
  each group are okay)</span></p>

  <p class="c3"><span class="c4">Matching rule
  precedence:</span></p>

  <p class="c3 c6"><span>If multiple template objects have matching
  rules that match the new system, go-susi will choose that
  template object whose rule contains the greatest number of
  matching (or non-matching in the case of "!~") regular
  expressions. If multiple template objects have the same score,
  one of them will be picked in an unspecified manner.</span></p>

  <p class="c3 c6"><span class="c4">Example:</span><span>&#160;In
  the example from</span> <span class="c4">Matching
  process</span><span>&#160;above,</span> <span class=
  "c2">cn=foobarmoomoo</span><span>&#160;has a matching score of 5,
  because it does matches all three</span> <span class=
  "c2">=~</span><span>&#160;parts and does not match the two</span>
  <span class="c2">!~</span><span>&#160;parts.</span></p>

  <p class="c3"><span class="c4">Attributes available for
  matching:</span></p>

  <p class="c3 c6"><span>The following attributes may be used in
  matching rules:</span></p>

  <ol class="c12" start="1">
    <li class="c15 c3 c5"><span>all attributes from the</span>
    <span class="c4">&lt;</span><span class=
    "c0">detected_hardware&gt;</span><span>&#160;element of
    the</span> <span class="c2">detected_hardware</span>
    <span>message.</span></li>

    <li class="c15 c3 c5"><span>the system's</span> <span class=
    "c2">macAddress</span><span>. If the</span> <span class=
    "c4">&lt;</span><span class=
    "c4">detected_hardware&gt;</span><span>&#160;element does not
    contain a valid MAC, it will be determined from the most
    recent</span> <span class=
    "c2">here_i_am</span><span>&#160;or</span> <span class=
    "c2">new_foreign_client</span><span>&#160;message concerning
    the client matching</span> <span class=
    "c2">detected_hardware</span><span>'s</span> <span class=
    "c4">&lt;source&gt;</span> <span>element.</span></li>

    <li class="c15 c3 c5"><span>the system's</span> <span class=
    "c2">ipHostNumber</span><span>&#160;extracted from</span>
    <span class="c2">detected_hardware</span><span>'s</span>
    <span class="c4">&lt;source&gt;</span><span>&#160;element
    (unless there is an attribute or sub-element</span>
    <span class="c2">ipHostNumber</span><span>&#160;in</span>
    <span class=
    "c4">&lt;detected_hardware&gt;</span><span>).</span></li>

    <li class="c15 c3 c5"><span class=
    "c2">cn</span><span>&#160;which is the system's DNS name in
    plain or fully qualified form as determined by a reverse lookup
    of</span> <span class="c2">ipHostNumber</span><span>&#160;(see
    above).</span></li>

    <li class="c15 c3 c5"><span class=
    "c2">siserver</span><span>&#160;which evaluates to the go-susi
    server doing the matching. You can match by IP address as well
    as DNS name (</span><span class=
    "c2">siserver</span><span>&#160;is a multi-value
    attribute)</span></li>
  </ol>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">Example message:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">detected_hardware</span><span class=
  "c0">&lt;/header&gt;</span><span class=
  "c2">&#160;</span><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">172.16.2.146:20083</span><span class=
  "c0">&lt;/source&gt;</span><span class=
  "c2">&#160;</span><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">172.16.2.143:20081</span><span class=
  "c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;detected_hardware</span></p>

  <p class="c10 c3"><span class="c0">ghCpuType="GenuineIntel /
  Intel(R) Celeron(R) CPU E3300 @ 2.50GHz - 2493.734"</span></p>

  <p class="c10 c3"><span class="c0">ghGfxAdapter="VMWare
  VMWARE0405"</span></p>

  <p class="c10 c3"><span class="c0">ghMemSize="1025692"</span></p>

  <p class="c10 c3"><span class="c0">ghNetNic="AMD PCnet - Fast
  79C971"</span></p>

  <p class="c10 c3"><span class="c0">ghSoundAdapter="Ensoniq
  Creative Sound Blaster AudioPCI64V, AudioPCI128"</span></p>

  <p class="c10 c3"><span class="c0">ghUsbSupport="false"
  gotoHardwareChecksum="qQvNNtPqaV5MG82UElNS7g"
  gotoSndModule="snd_ens1371"</span></p>

  <p class="c10 c3"><span class="c0">gotoXDriver=""</span></p>

  <p class="c10 c3"><span class="c0">gotoXHsync="31-48"
  gotoXMonitor="Generic Monitor"</span></p>

  <p class="c10 c3"><span class="c0">gotoXMouseType="explorerps/2"
  gotoXMouseport="/dev/input/mice"</span></p>

  <p class="c10 c3"><span class="c0">gotoXResolution="800x600"
  gotoXVsync="50-90"</span></p>

  <p class="c10 c3"><span class="c0">gotoXkbModel="pc104"
  macAddress="00:00:00:00:00:00"</span></p>

  <p class="c3 c5"><span class="c0">&gt;</span></p>

  <p class="c10 c3"><span class=
  "c0">&lt;ghScsiDev&gt;</span><span class="c2">NECVMWar VMware IDE
  CDR10</span><span class="c0">&lt;/ghScsiDev&gt;</span></p>

  <p class="c10 c3"><span class=
  "c0">&lt;ghScsiDev&gt;</span><span class="c2">VMware Virtual
  S</span><span class="c0">&lt;/ghScsiDev&gt;</span><span class=
  "c2">&#160;</span><span class=
  "c0">&lt;gotoModules&gt;</span><span class=
  "c2">ppdev</span><span class=
  "c0">&lt;/gotoModules&gt;</span><span class=
  "c2">&#160;</span><span class=
  "c0">&lt;gotoModules&gt;</span><span class=
  "c2">gameport</span><span class=
  "c0">&lt;/gotoModules&gt;</span><span class=
  "c2">&#160;</span><span class=
  "c0">&lt;gotoModules&gt;</span><span class=
  "c2">psmouse</span><span class=
  "c0">&lt;/gotoModules&gt;</span><span class=
  "c2">&#160;</span><span class=
  "c0">&lt;gotoModules&gt;</span><span class=
  "c2">joydev</span><span class=
  "c0">&lt;/gotoModules&gt;</span><span class=
  "c2">&#160;</span><span class=
  "c0">&lt;gotoModules&gt;</span><span class=
  "c2">parport_pc</span><span class=
  "c0">&lt;/gotoModules&gt;</span></p>

  <p class="c10 c3"><span class="c2">&#8230;</span></p>

  <p class="c10 c3"><span class=
  "c0">&lt;gotoModules&gt;</span><span class=
  "c2">async_xor</span><span class=
  "c0">&lt;/gotoModules&gt;</span></p>

  <p class="c10 c3"><span class=
  "c0">&lt;gotoModules&gt;</span><span class=
  "c2">hid</span><span class="c0">&lt;/gotoModules&gt;</span></p>

  <p class="c10 c3"><span class=
  "c0">&lt;gotoModules&gt;</span><span class=
  "c2">pcnet32</span><span class=
  "c0">&lt;/gotoModules&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;/detected_hardware&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c1"></p>

  <p class="c3"><span class="c4">gosa-si-client note:</span></p>

  <p class="c3 c6"><span>The</span> <span class=
  "c4">macAddress</span><span>&#160;attribute of</span>
  <span class="c4">&lt;detected_hardware&gt;</span><span>&#160; may
  be 00:00:00:00:00:00 when this message is sent by gosa-si-client.
  I don't know if this happens all the time with all versions of
  gosa-si-client.</span></p>

  <p class="c3"><span class="c4">go-susi note:</span></p>

  <p class="c3 c6"><span>go-susi permits multiple</span>
  <span class=
  "c4">&lt;detected_hardware&gt;</span><span>&#160;elements and
  will take the union of all their values.</span></p>

  <p class="c3 c6"><span>As an alternative to attributes on
  the</span> <span class=
  "c4">&lt;detected_hardware&gt;</span><span>&#160;element go-susi
  also accepts child elements inside</span> <span class=
  "c4">&lt;detected_hardware&gt;</span><span>, e.g.</span>
  <span class=
  "c4">&lt;detected_hardware&gt;&lt;gotoXHsync&gt;</span><span>31-48</span><span class="c4">&lt;/gotoXHsync&gt;&lt;/detected_hardware&gt;</span><span>.<br />
  </span></p>

  <p class="c3 c6"><span>go-susi writes all attributes and
  sub-elements of</span> <span class=
  "c4">&lt;detected_hardware&gt;</span><span>&#160;into the LDAP
  object, except</span> <span class="c2">objectClass</span><span>.
  If there is an</span> <span class=
  "c2">ipHostNumber</span><span>&#160;attribute or element, it will
  override the IP address extracted from</span> <span class=
  "c4">&lt;source&gt;</span><span>. If both</span> <span class=
  "c2">ipHostNumber</span><span>&#160;and</span> <span class=
  "c2">macAddress</span><span>&#160;are present, the</span>
  <span class="c4">&lt;source&gt;</span><span>&#160;element does
  not need to identify a known client. This means that with go-susi
  you can use a</span> <span class=
  "c2">detected_hardware</span><span>&#160;message to create a
  self-contained ready-for-installation object in LDAP and you can
  use &#160;</span><span class=
  "c2">detected_hardware</span><span>&#160;messages to update all
  aspects of a system object. It is even possible to rename a
  system by including a</span> <span class=
  "c2">cn</span><span>&#160;attribute and to move a system by
  including a</span> <span class=
  "c2">dn</span><span>&#160;attribute.<br />
  Note that when updating an existing object, all attributes from
  the old object that are completely missing from</span>
  <span class="c4">&lt;detected_hardware&gt;</span><span>&#160;will
  be copied, but if</span> <span class=
  "c4">&lt;detected_hardware&gt;</span><span>&#160;has an attribute
  with the same name, it will replace the old attribute completely.
  IOW, old and new attribute values are never mixed for the same
  attribute. E.g. if you want to add a single</span> <span class=
  "c2">gotoModules</span><span>&#160;entry, you need to repeat all
  the old entries in the</span> <span class=
  "c2">detected_hardware</span><span>&#160;message. You can't just
  list the new module and expect the others to be
  copied.</span></p>

  <p class="c3 c6"><span>To delete an attribute, include an empty
  sub-element of that name in</span> <span class=
  "c4">&lt;detected_hardware&gt;</span><span>.</span></p>

  <p class="c3 c6"><span>go-susi accepts</span> <span class=
  "c2">detected_hardware</span><span>&#160;messages encrypted with
  any key, not just client keys. This allows a 3rd party to create
  system objects by sending</span> <span class=
  "c2">detected_hardware</span><span>&#160;encrypted e.g. with the
  [GOsaPackages] key.</span></p>
  <hr style="page-break-before:always;display:none;" />

  <h3 class="c3"><a name="h.ylgwskj1nfmx" id=
  "h.ylgwskj1nfmx"></a><span>trigger_action_*</span></h3>

  <p class="c3"><span class="c4">Purpose:</span></p>

  <p class="c3 c6"><span>Server&#10132;Client.
  Sent</span><span>&#160;by the server to the client when the
  server starts executing a job that affects the client. The client
  will then react appropriately. Most of the time this means
  presenting a message to logged in users to log out.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">Example message:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">trigger_action_localboot</span><span class=
  "c0">&lt;/header&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">172.16.2.143:20081</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">172.16.2.146:20083</span><span class=
  "c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;trigger_action_localboot&gt;&lt;/trigger_action_localboot&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;session_id&gt;</span><span class=
  "c2">109</span><span class="c0">&lt;/session_id&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">The following actions are
  supported:</span></p>

  <p class="c3 c6"><span class="c2">trigger_action_localboot<br />
  trigger_action_halt<br />
  trigger_action_faireboot<br />
  trigger_action_reboot<br />
  trigger_action_reinstall<br />
  trigger_action_update<br />
  trigger_action_instant_update</span></p>
  <hr style="page-break-before:always;display:none;" />

  <p class="c1"></p><a href="#" name="id.qz602c68q3ci" id=
  "id.qz602c68q3ci"></a>

  <h2 class="c3"><a name="h.g0n6u5xsrhzi" id=
  "h.g0n6u5xsrhzi"></a><span>Installation and
  Softupdate</span></h2>

  <p class="c3"><span>When an installation is pending and the
  client's LDAP object has</span> <span class="c2">gotoMode
  locked</span><span>&#160;the client waits for the si-server where
  it is registered to send the client a</span> <span class=
  "c2">set_activated_for_installation</span><span>&#160;message.</span></p>

  <p class="c3"><span>During an installation as well as during a
  softupdate the client sends information about the FAI progress to
  the server.</span></p>

  <p class="c3"><span>The</span> <span class=
  "c2">CLMSG_PROGRESS</span><span>&#160;message contains a number
  between 1 and 100 that gives a rough indication of the percentage
  of the process that has been completed.</span></p>

  <p class="c3"><span>The</span> <span class="c2">CLMSG_HOOK,
  CLMSG_TASKBEGIN, CLMSG_TASKDIE, CLMSG_TASKEND</span>
  <span>and</span><span class=
  "c2">&#160;CLMSG_TASKERROR</span><span>&#160;messages inform the
  server about specific steps in the FAI process.</span></p>

  <p class="c3"><span>The most important message during
  installation/update is</span> <span class=
  "c2">CLMSG_save_fai_log</span><span>&#160;which the client uses
  to transmit the log files from the process to the server. The
  server stores these log files and allows access to them
  via</span> <span class="c2">gosa_show_log_by_mac,
  gosa_show_log_files_by_date_and_mac</span><span>&#160;and</span>
  <span class="c2">gosa_get_log_file_by_date_and_mac.</span></p>

  <p class="c3"><span>The</span> <span class=
  "c2">CLMSG_check</span><span>&#160;and</span> <span class=
  "c2">CLMSG_GOTOACTIVATION</span><span>&#160;messages have unclear
  purpose and are ignored by the si-server.</span></p>

  <p class="c3 c8"></p>

  <h3 class="c3"><a name="h.finq4l4vjm98" id=
  "h.finq4l4vjm98"></a><span>set_activated_for_installation</span></h3>

  <p class="c3"><span class="c4">Purpose:</span></p>

  <p class="c3 c6"><span>Server&#10132;Client. Tell
  t</span><span>he client that it has been activated. This message
  is always sent when a trigger_action_activate job is executed,
  regardless of whether the client has a pending installation or
  not. It&#8217;s even sent if the client is already
  activated.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">Example message:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">set_activated_for_installation</span><span class=
  "c0">&lt;/header&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">172.16.2.143:20081</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">172.16.2.146:20083</span><span class=
  "c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;set_activated_for_installation&gt;&lt;/set_activated_for_installation&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;session_id&gt;</span><span class=
  "c2">109</span><span class="c0">&lt;/session_id&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">gosa-si-client notes:</span></p>

  <p class="c3 c6"><span>When the client receives this message
  in</span> <span class=
  "c2">client/events/installation.pm</span><span>&#160;it creates a
  file</span> <span class=
  "c2">/var/run/gosa-si/gosa-si-client.activated</span><span>.</span>
  <span class="c2">fai/get-config-dir-gosa</span><span>&#160;waits
  for the existence of this file before starting the
  installation.</span></p>
  <hr style="page-break-before:always;display:none;" />

  <h3 class="c3"><a name="h.ntyp12z772rh" id=
  "h.ntyp12z772rh"></a><span>CLMSG_PROGRESS</span></h3>

  <p class="c3"><span class="c4">Purpose:</span></p>

  <p class="c3 c6"><span>Client&#10132;Server. Dur</span><span>ing
  installation or softupdate the client uses this message to send
  progress information in percent to the server.</span></p>

  <p class="c3 c6"><span>When the server receives this message it
  will update its job data and will forward the new information
  via</span> <span class=
  "c2">foreign_job_updates</span><span>&#160;to its peers.
  Subsequent</span> <span class=
  "c2">gosa_query_jobdb</span><span>&#160;requests will also
  receive the new progress number in the answer's</span>
  <span class=
  "c4">&lt;progress&gt;</span><span>&#160;element.</span></p>

  <p class="c3 c6"><span>Note that</span> <span class=
  "c2">CLMSG_GOTOACTIVATION</span><span>&#160;is technically also a
  progress indication and reflected in the</span> <span class=
  "c4">&lt;progress&gt;</span><span>&#160;element.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">Example message:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">CLMSG_PROGRESS</span><span class=
  "c0">&lt;/header&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">172.16.2.146:20083</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">172.16.2.85:20081</span><span class=
  "c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;CLMSG_PROGRESS&gt;</span><span class=
  "c2">77</span><span class="c0">&lt;/CLMSG_PROGRESS&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;macaddress&gt;</span><span class=
  "c2">00:0c:29:50:a3:52</span><span class=
  "c0">&lt;/macaddress&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;timestamp&gt;</span><span class=
  "c2">20130305113331</span><span class=
  "c0">&lt;/timestamp&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">The message elements have the
  following meaning:</span></p>

  <p class="c3"><span class="c0">&lt;CLMSG_PROGRESS&gt;</span></p>

  <p class="c3 c6"><span>An integer between between 1 and 100
  (inclusive) giving the percentage of the installation/softupdate
  that has been completed.</span></p>

  <p class="c3"><span class="c0">&lt;timestamp&gt;,
  &lt;macaddress&gt;</span><span>&#160;see</span> <span class=
  "c2">CLMSG_CURRENTLY_LOGGED_IN.</span></p>
  <hr style="page-break-before:always;display:none;" />

  <h3 class="c3"><a name="h.n5rmujuoqo6x" id=
  "h.n5rmujuoqo6x"></a><span>CLMSG_GOTOACTIVATION</span></h3>

  <p class="c3"><span class="c4">Purpose:</span></p>

  <p class="c3 c6"><span>Client&#10132;Server. Th</span><span>e
  client sends this message when it receives</span> <span class=
  "c2">GOTOACTIVATION</span><span>&#160;via its FIFO interface. I
  don't know who sends this to the FIFO. In any case it happens
  when the client is waiting for activation because it is in</span>
  <span class="c2">gotoMode "locked".</span><span>&#160;It does not
  matter if the client already existed in LDAP or was just
  created.</span></p>

  <p class="c3 c6"><span>When the server receives this message it
  will update its job data to have</span></p>

  <p class="c3 c5"><span>&#160;</span><span class=
  "c4">&lt;progress&gt;</span><span class=
  "c2">goto-activation</span><span class=
  "c4">&lt;/progress&gt;</span></p>

  <p class="c3 c6"><span>and will forward the new information
  via</span> <span class=
  "c2">foreign_job_updates</span><span>&#160;to its peers.
  Subsequent</span> <span class=
  "c2">gosa_query_jobdb</span><span>&#160;requests will also
  receive the new progress</span> <span class=
  "c4">&lt;progress&gt;</span><span>&#160;element.</span></p>

  <p class="c3 c6"><span>Other than updating the progress, this
  message has no effect on the server.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">Example message:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">CLMSG_GOTOACTIVATION</span><span class=
  "c0">&lt;/header&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">172.16.2.146:20083</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">172.16.2.85:20081</span><span class=
  "c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;CLMSG_GOTOACTIVATION&gt;&lt;/CLMSG_GOTOACTIVATION&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;macaddress&gt;</span><span class=
  "c2">00:0c:29:50:a3:52</span><span class=
  "c0">&lt;/macaddress&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;timestamp&gt;</span><span class=
  "c2">20130305113331</span><span class=
  "c0">&lt;/timestamp&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">The message elements have the
  following meaning:</span></p>

  <p class="c3"><span class="c0">&lt;timestamp&gt;,
  &lt;macaddress&gt;</span><span>&#160;see</span> <span class=
  "c2">CLMSG_CURRENTLY_LOGGED_IN.</span></p>
  <hr style="page-break-before:always;display:none;" />

  <h3 class="c3"><a name="h.95smg2f0t4s6" id=
  "h.95smg2f0t4s6"></a><span>CLMSG_save_fai_log</span></h3>

  <p class="c3"><span class="c4">Purpose:</span></p>

  <p class="c3 c6"><span>Client&#10132;Server.
  Tra</span><span>nsmits log files from a finished installation or
  softupdate to the server.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">Example message:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">CLMSG_save_fai_log</span><span class=
  "c0">&lt;/header&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">172.16.2.146:20083</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">172.16.2.85:20081</span><span class=
  "c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;macaddress&gt;</span><span class=
  "c2">00:0c:29:50:a3:52</span><span class=
  "c0">&lt;/macaddress&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;fai_action&gt;</span><span class=
  "c2">install</span><span class=
  "c0">&lt;/fai_action&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;CLMSG_save_fai_log&gt;</span></p>

  <p class="c3 c5"><span class=
  "c2">log_file:fstab:IyAvZXRjL2...c2RhNQo=</span></p>

  <p class="c3 c5"><span class=
  "c2">log_file:format.log:U3Rhc...M2I5ODEK</span></p>

  <p class="c3 c5"><span class="c2">...</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;/CLMSG_save_fai_log&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">The message elements have the
  following meaning:</span></p>

  <p class="c3"><span class="c0">&lt;macaddress&gt;</span></p>

  <p class="c3 c6"><span>The MAC of the client whose log files are
  being sent (usually the same machine as identified by</span>
  <span class="c4">&lt;source&gt;</span><span>.</span></p>

  <p class="c3"><span class=
  "c0">&lt;CLMSG_save_fai_log&gt;</span></p>

  <p class="c3 c6"><span>The log files to be transmitted. Every log
  file starts with the literal string</span> <span class=
  "c2">"log_file:"</span><span>, followed by the file name,
  followed by</span> <span class="c2">":"</span><span>. This is
  followed by the base64-encoded file contents and terminated by a
  space. NOTE: Do not use the spaces to separate the log files,
  because gosa-si-client inserts spurious spaces into the base64
  string. Use the string</span> <span class=
  "c2">"log_file:"</span><span>&#160;to recognize where each log
  file starts. This string can not occur within base64 data
  because</span> <span class="c2">":"</span><span>&#160;is not a
  valid base64 alphabet character.</span></p>

  <p class="c3"><span class="c0">&lt;fai_action&gt;</span></p>

  <p class="c3 c6"><span>The FAI action for which log files are
  being transmitted. Possible values are</span> <span class=
  "c2">"install"</span> <span>and</span> <span class=
  "c2">"softupdate".</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span>There is no</span> <span class=
  "c4">&lt;timestamp&gt;</span><span>. Unlike most other</span>
  <span class="c2">CLMSG_*</span><span>&#160;messages, this one
  does not include a</span> <span class=
  "c4">&lt;timestamp&gt;</span><span>&#160;element.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">gosa-si-client notes:</span></p>

  <p class="c3 c6"><span>gosa-si-client inserts spaces into the
  base64-encoded data which break some base64 decoders. Remove all
  whitespace before decoding.</span></p>

  <p class="c3 c6"><span>I have observed broken base64 strings
  coming from gosa-si-server. Make sure to have robust handling of
  files that fail to decode properly.</span></p>
  <hr style="page-break-before:always;display:none;" />

  <h3 class="c3"><a name="h.g7r8biivaqpb" id=
  "h.g7r8biivaqpb"></a><span>CLMSG_&lt;FAI MONITOR
  EVENT&gt;</span></h3>

  <p class="c3"><span class="c4">Purpose</span><span>:</span></p>

  <p class="c3 c6"><span>Client&#10132;Server. Dur</span><span>ing
  installation gosa-si client receives events from FAI via its FIFO
  interface. These events can be seen in the</span> <span class=
  "c2">fai-monitord.log</span><span>&#160;log file. gosa-si-client
  passes these events on to the server.</span></p>

  <p class="c1"></p>

  <p class="c3 c6"><span>The CLMSG_* messages are used to
  communicate the status of an installation from the client to the
  Server. These messages look almost the same, except the element
  with the value and the header. Furthermore, the message</span>
  <span class="c2">CLMSG_save_fai_log</span><span>&#160;has the
  additional element</span> <span class=
  "c2">&lt;fai_action&gt;.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">Example message:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">CLMSG_TASKBEGIN</span><span class=
  "c0">&lt;/header&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">172.16.2.146:20083</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">172.16.2.85:20081</span><span class=
  "c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;CLMSG_TASKBEGIN&gt;</span><span class=
  "c2">confdir</span><span class=
  "c0">&lt;/CLMSG_TASKBEGIN&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;macaddress&gt;</span><span class=
  "c2">00:0c:29:50:a3:52</span><span class=
  "c0">&lt;/macaddress&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;timestamp&gt;</span><span class=
  "c2">20130305113331</span><span class=
  "c0">&lt;/timestamp&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">Possible</span> <span class=
  "c4">&lt;FAI MONITOR EVENT&gt;s:</span></p>

  <p class="c3 c6"><span class="c2">HOOK<br />
  TASKBEGIN<br />
  TASKDIE<br />
  TASKEND<br />
  TASKERROR</span></p>

  <p class="c3 c6"><span class="c2">check</span></p>

  <p class="c3"><span class="c0">&#160;</span></p>
  <hr style="page-break-before:always;display:none;" />

  <h3 class="c3"><a name="h.69oiwe17guu6" id=
  "h.69oiwe17guu6"></a><span>CLMSG_TASKBEGIN / CLMSG_TASKERROR /
  CLMSG_TASKEND</span></h3>

  <p class="c3"><span class="c4">Purpose:</span></p>

  <p class="c3 c6"><span>(See also</span> <span class=
  "c2">CLMSG_&lt;FAI MONITOR EVENT&gt;</span><span>)</span></p>

  <p class="c3 c6"><span>Client&#10132;Server. Du</span><span>ring
  installation or softupdate the client sends these messages to the
  server to inform it about FAI tasks that are being started
  (CLMSG_TASKBEGIN), errors that occur during task execution
  (CLMSG_TASKERROR) and the exit status when a task finishes
  (CLMSG_TASKEND).</span></p>

  <p class="c1"></p>

  <p class="c3"><span class="c4">Example messages for a
  successfully completed task:</span></p>

  <p class="c3"><span class="c4">Task &#8220;confdir&#8221;
  begins:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">CLMSG_TASKBEGIN</span><span class=
  "c0">&lt;/header&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">172.16.2.146:20083</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">172.16.2.85:20081</span><span class=
  "c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;CLMSG_TASKBEGIN&gt;</span><span class=
  "c2">confdir</span><span class=
  "c0">&lt;/CLMSG_TASKBEGIN&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;macaddress&gt;</span><span class=
  "c2">00:0c:29:50:a3:52</span><span class=
  "c0">&lt;/macaddress&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;timestamp&gt;</span><span class=
  "c2">20130305113331</span><span class=
  "c0">&lt;/timestamp&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c1"></p>

  <p class="c3"><span class="c4">Task &#8220;confdir&#8221; has
  terminated successfully with exit code 0:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">CLMSG_TASKEND</span><span class=
  "c0">&lt;/header&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">172.16.2.146:20083</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">172.16.2.85:20081</span><span class=
  "c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;CLMSG_TASKEND&gt;</span><span class="c2">confdir
  0</span><span class="c0">&lt;/CLMSG_TASKEND&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;macaddress&gt;</span><span class=
  "c2">00:0c:29:50:a3:52</span><span class=
  "c0">&lt;/macaddress&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;timestamp&gt;</span><span class=
  "c2">20130305113331</span><span class=
  "c0">&lt;/timestamp&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>
  <hr style="page-break-before:always;display:none;" />

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">Example messages for a failed
  task:</span></p>

  <p class="c3"><span class="c4">Task &#8220;instsoft&#8221;
  begins:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">CLMSG_TASKBEGIN</span><span class=
  "c0">&lt;/header&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">172.16.2.146:20083</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">172.16.2.85:20081</span><span class=
  "c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;CLMSG_TASKBEGIN&gt;</span><span class=
  "c2">instsoft</span><span class=
  "c0">&lt;/CLMSG_TASKBEGIN&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;macaddress&gt;</span><span class=
  "c2">00:0c:29:50:a3:52</span><span class=
  "c0">&lt;/macaddress&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;timestamp&gt;</span><span class=
  "c2">20130305113331</span><span class=
  "c0">&lt;/timestamp&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">An error code 472 occurs during
  execution of task &#8220;instsoft&#8221;:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">CLMSG_TASKBEGIN</span><span class=
  "c0">&lt;/header&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">172.16.2.146:20083</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">172.16.2.85:20081</span><span class=
  "c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;CLMSG_TASKBEGIN&gt;</span><span class=
  "c2">error</span><span class=
  "c0">&lt;/CLMSG_TASKBEGIN&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;macaddress&gt;</span><span class=
  "c2">00:0c:29:50:a3:52</span><span class=
  "c0">&lt;/macaddress&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;timestamp&gt;</span><span class=
  "c2">20130305113331</span><span class=
  "c0">&lt;/timestamp&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">CLMSG_TASKERROR</span><span class=
  "c0">&lt;/header&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">172.16.2.146:20083</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">172.16.2.85:20081</span><span class=
  "c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;CLMSG_TASKERROR&gt;</span></p>

  <p class="c3 c5"><span class="c2">&#160; instsoft 472
  warn:install_packages: various error messages</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;/CLMSG_TASKERROR&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;macaddress&gt;</span><span class=
  "c2">00:0c:29:50:a3:52</span><span class=
  "c0">&lt;/macaddress&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;timestamp&gt;</span><span class=
  "c2">20130305113331</span><span class=
  "c0">&lt;/timestamp&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">CLMSG_TASKEND</span><span class=
  "c0">&lt;/header&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">172.16.2.146:20083</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">172.16.2.85:20081</span><span class=
  "c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;CLMSG_TASKEND&gt;</span><span class="c2">error
  472</span><span class="c0">&lt;/CLMSG_TASKEND&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;macaddress&gt;</span><span class=
  "c2">00:0c:29:50:a3:52</span><span class=
  "c0">&lt;/macaddress&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;timestamp&gt;</span><span class=
  "c2">20130305113331</span><span class=
  "c0">&lt;/timestamp&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">The CLMSG_TASKEND for the
  &#8220;instsoft&#8221; task that failed:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">CLMSG_TASKEND</span><span class=
  "c0">&lt;/header&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">172.16.2.146:20083</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">172.16.2.85:20081</span><span class=
  "c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;CLMSG_TASKEND&gt;</span><span class="c2">instsoft
  472</span><span class="c0">&lt;/CLMSG_TASKEND&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;macaddress&gt;</span><span class=
  "c2">00:0c:29:50:a3:52</span><span class=
  "c0">&lt;/macaddress&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;timestamp&gt;</span><span class=
  "c2">20130305113331</span><span class=
  "c0">&lt;/timestamp&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c1"></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">The message elements have the
  following meaning:</span></p>

  <p class="c3"><span class=
  "c0">&lt;CLMSG_TASKBEGIN&gt;,&lt;CLMSG_TASKEND&gt;</span></p>

  <p class="c3 c6"><span>These messages always come in pairs.
  Every</span> <span class=
  "c2">CLMSG_TASKBEGIN</span><span>&#160;has a matching</span>
  <span class="c2">CLMSG_TASKEND</span><span>.</span></p>

  <p class="c3"><span class="c0">&lt;CLMSG_TASKBEGIN&gt;,
  &lt;CLMSG_TASKERROR&gt;,&lt;CLMSG_TASKEND&gt;</span></p>

  <p class="c3 c6"><span>A</span> <span class=
  "c2">CLMSG_TASKERROR</span><span>&#160;is surrounded by</span>
  <span class="c2">CLMSG_TASKBEGIN</span><span>&#160;and</span>
  <span class="c2">CLMSG_TASKEND</span><span>&#160;for an</span>
  <span class="c2">"error"</span><span>&#160;task. This means that
  if an error occurs during a task there will be (at least) 5
  messages:</span></p>

  <p class="c3 c6"><span class="c2">CLMSG_TASKBEGIN,
  CLMSG_TASKBEGIN, CLMSG_TASKERROR, CLMSG_TASKEND,
  CLMSG_TASKEND</span><span>. Other messages, in particular</span>
  <span class="c2">CLMSG_PROGRESS</span><span>&#160;and</span>
  <span class="c2">CLMSG_HOOK</span><span>&#160;may occur between
  these messages.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class=
  "c0">&lt;CLMSG_TASKERROR&gt;</span><span>&#160;The following is
  (an incomplete) list of possible errors:</span></p>

  <p class="c3 c6"><span class="c2">instsoft 472
  warn:install_packages: various error messages<br />
  instsoft 421 warn:install_packages: packages missing</span></p>

  <p class="c1"></p>

  <p class="c3"><span class="c0">&lt;timestamp&gt;,
  &lt;macaddress&gt;</span><span>&#160;see</span> <span class=
  "c2">CLMSG_CURRENTLY_LOGGED_IN.</span></p>
  <hr style="page-break-before:always;display:none;" />

  <p class="c1"></p>

  <h3 class="c3"><a name="h.z4re866t15e6" id=
  "h.z4re866t15e6"></a><span>CLMSG_check</span></h3>

  <p class="c3"><span class="c4">Purpose:</span></p>

  <p class="c3 c6"><span>(See also</span> <span class=
  "c2">CLMSG_&lt;FAI MONITOR EVENT&gt;</span><span>)</span></p>

  <p class="c3 c6"><span>Client&#10132;Server.Se</span><span>nt by
  gosa-si-client when it receives "check &lt;foo&gt;" via its FIFO.
  This is caused by<br /></span><span class="c2">"if sendmon check
  $sendhostname; then"</span></p>

  <p class="c3 c6"><span>from FAI's</span> <span class=
  "c2">subroutines:task_confdir()</span><span>. Has no effect on
  the server.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">Example message:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">CLMSG_check</span><span class=
  "c0">&lt;/header&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">172.16.2.146:20083</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">172.16.2.85:20081</span><span class=
  "c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;macaddress&gt;</span><span class=
  "c2">00:0c:29:50:a3:52</span><span class=
  "c0">&lt;/macaddress&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;CLMSG_check&gt;</span><span class=
  "c2">fooclient</span><span class=
  "c0">&lt;/CLMSG_check&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;timestamp&gt;</span><span class=
  "c2">20130305113331</span><span class=
  "c0">&lt;/timestamp&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;<br /></span></p>

  <p class="c3"><span class="c4">The message elements have the
  following meaning:</span></p>

  <p class="c3"><span class=
  "c0">&lt;CLMSG_check&gt;</span><span>&#160;The plain name of the
  client.</span></p>

  <p class="c3"><span class="c0">&lt;timestamp&gt;,
  &lt;macaddress&gt;</span> <span>see</span> <span class=
  "c2">CLMSG_CURRENTLY_LOGGED_IN.</span></p>
  <hr style="page-break-before:always;display:none;" />
  <a href="#" name="id.vafpk0dntk2q" id="id.vafpk0dntk2q"></a>

  <h2 class="c3"><a name="h.p40mxwr1vmxg" id=
  "h.p40mxwr1vmxg"></a><span>Query various information</span></h2>

  <p class="c3"><span>The si-server manages various databases on
  behalf of GOsa.</span></p>

  <p class="c3"><span>The message</span> <span class=
  "c2">gosa_query_fai_server</span><span>&#160;returns a list of
  all known Debian software repositories as well as the available
  releases and their sections.</span></p>

  <p class="c3"><span>The message</span> <span class=
  "c2">gosa_query_fai_release</span><span>&#160;performs a
  parameterized search over the database of FAI classes. It allows
  selection by a variety of criteria.</span></p>

  <p class="c3"><span>The message</span> <span class=
  "c2">gosa_query_packages_list</span><span>&#160;performs a
  parameterized search over the database of Debian packages. It
  allows selection by a variety of criteria.</span></p>

  <p class="c3"><span>The message</span> <span class=
  "c2">gosa_get_available_kernel</span><span>&#160;returns a list
  of all available kernels for a certain release.</span></p>

  <p class="c3"><span>The messages</span> <span class=
  "c2">gosa_show_log_by_mac,
  gosa_show_log_files_by_date_and_mac</span><span>&#160;and</span>
  <span class=
  "c2">gosa_get_log_file_by_date_and_mac</span><span>&#160;are used
  to access the log files from installations/updates stored on the
  server. Note that server-server-communication does not extend to
  log files, so these messages only return those log files sent to
  the particular server via</span> <span class=
  "c2">CLMSG_save_fai_log.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">Note:</span></p>

  <p class="c3 c6"><span>The transition of GOsa from accessing LDAP
  directly to using the si-server is very incomplete. In many
  places GOsa does its own LDAP reading and writing and maintains
  its own state. Whenever an operation in GOsa takes very long,
  that is usually the reason.</span></p>
  <hr style="page-break-before:always;display:none;" />

  <h3 class="c3"><a name="h.vnc6qrea3m0g" id=
  "h.vnc6qrea3m0g"></a><span>gosa_query_fai_server</span></h3>

  <p class="c3"><span class="c4">Purpose:</span></p>

  <p class="c3 c6"><span>GOsa&#11020;Server. Return a list of all
  known Debian software repositories as well as the available
  releases and their sections.</span></p>

  <p class="c1"></p>

  <p class="c3"><span class="c4">Example message (encrypted with
  [GOsaPackages] key):</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">gosa_query_fai_server</span><span class=
  "c0">&lt;/header&gt;<br />
  &lt;source&gt;</span><span class="c2">GOSA</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">GOSA</span><span class="c0">&lt;/target&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">Example reply:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">query_fai_server</span><span class=
  "c0">&lt;/header&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">172.16.2.143:20081</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">GOSA</span><span class="c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class="c0">&lt;answer1&gt;</span></p>

  <p class="c10 c3"><span class=
  "c0">&lt;timestamp&gt;</span><span class=
  "c2">20130304093211</span><span class=
  "c0">&lt;/timestamp&gt;</span></p>

  <p class="c10 c3"><span class=
  "c0">&lt;fai_release&gt;</span><span class=
  "c2">halut/2.4.0</span><span class=
  "c0">&lt;/fai_release&gt;</span></p>

  <p class="c10 c3"><span class="c0">&lt;tag&gt;</span><span class=
  "c2">1154342234048479900</span><span class=
  "c0">&lt;/tag&gt;</span></p>

  <p class="c10 c3"><span class=
  "c0">&lt;server&gt;</span><span class=
  "c2">http://vts-susi.example.de/repo</span><span class=
  "c0">&lt;/server&gt;</span></p>

  <p class="c10 c3"><span class=
  "c0">&lt;sections&gt;</span><span class=
  "c2">main,contrib,non-free,lhm,ff</span><span class=
  "c0">&lt;/sections&gt;</span></p>

  <p class="c3 c5"><span class="c0">&lt;/answer1&gt;</span></p>

  <p class="c10 c3"><span class="c2">...</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;answerN&gt;</span><span class=
  "c2">...</span><span class="c0">&lt;/answerN&gt;<br />
  &lt;session_id&gt;</span><span class="c2">1105</span><span class=
  "c0">&lt;/session_id&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c1"></p>

  <p class="c3"><span class="c4">The reply elements have the
  following meaning:</span></p>

  <p class="c3"><span class=
  "c4">&lt;server&gt;</span><span>&#160;The repository URL of the
  directory that contains the directories</span> <span class=
  "c2">dists/</span><span>&#160;and</span> <span class=
  "c2">pool/</span><span>.</span></p>

  <p class="c3"><span class="c4">&lt;fai_release&gt;</span></p>

  <p class="c3 c6"><span>The release name. Release information is
  in &lt;server&gt;/dists/&lt;fai_release&gt;.</span></p>

  <p class="c3 c6"><span>If the same server has multiple releases,
  each release has its own</span> <span class=
  "c4">&lt;answerX&gt;</span><span>&#160;element.</span></p>

  <p class="c3"><span class=
  "c4">&lt;timestamp&gt;</span><span>&#160;The time when go-susi
  last checked this entry.</span></p>

  <p class="c3"><span class="c4">&lt;tag&gt;</span><span class=
  "c7">&#160;(optional)</span></p>

  <p class="c3 c6"><span>The gosaUnitTag of the repository server
  (if it has one). The reply may contain servers with different
  unit tags.</span></p>
  <hr style="page-break-before:always;display:none;" />

  <h3 class="c3"><a name="h.1c4dc8mqlioo" id=
  "h.1c4dc8mqlioo"></a><span>gosa_query_fai_release</span></h3>

  <p class="c3"><span class="c4">Purpose:</span></p>

  <p class="c3 c6"><span>GOsa&#11020;Server. Query the FAI classes
  database.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">Example message:</span></p>

  <p class="c3"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c6"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">gosa_query_fai_release</span><span class=
  "c0">&lt;/header&gt;<br />
  &lt;target&gt;</span><span class="c2">GOSA</span><span class=
  "c0">&lt;/target&gt;<br />
  &lt;source&gt;</span><span class="c2">GOSA</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;where&gt;</span></p>

  <p class="c3 c5"><span class="c0">&lt;clause&gt;</span></p>

  <p class="c10 c3"><span class=
  "c0">&lt;phrase&gt;</span></p><a href="#" name="id.vbpk5t3411tq"
  id="id.vbpk5t3411tq"></a>

  <p class="c3 c14"><span class=
  "c0">&lt;fai_release&gt;</span><span class=
  "c2">plophos/4.1.0</span><span class=
  "c0">&lt;/fai_release&gt;</span></p>

  <p class="c10 c3"><span class="c0">&lt;/phrase&gt;</span></p>

  <p class="c3 c5"><span class="c0">&lt;/clause&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/where&gt;</span></p>

  <p class="c3"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c3"><span class="c4">The message elements have the
  following meaning:</span></p>

  <p class="c3"><span class="c4">&lt;where&gt;</span></p>

  <p class="c3 c6"><span>The query syntax is the same as for</span>
  <span class="c2">gosa_query_jobdb</span><span>. The available
  column names are</span> <span class=
  "c4">&lt;timestamp&gt;</span><span>,</span> <span class=
  "c4">&lt;fai_release&gt;</span><span>,</span> <span class=
  "c4">&lt;type&gt;</span><span>,</span> <span class=
  "c4">&lt;class&gt;, &lt;tag&gt;</span><span>&#160;and</span>
  <span class="c4">&lt;state&gt;</span><span>. Their meanings are
  described below in the explanation of the reply
  elements.</span></p>

  <p class="c3 c6"><span class="c4">Note:
  &lt;tag&gt;</span><span>&#160;is a go-susi extension. See the
  explanation of the corresponding reply element below.</span></p>

  <p class="c3"><span class="c4">Example reply:</span></p>

  <p class="c3"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c6"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">query_fai_release</span><span class=
  "c0">&lt;/header&gt;<br />
  &lt;source&gt;</span><span class=
  "c2">172.16.2.143:20081</span><span class=
  "c0">&lt;/source&gt;<br />
  &lt;target&gt;</span><span class="c2">GOSA</span><span class=
  "c0">&lt;/target&gt;<br />
  &lt;answer1&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;timestamp&gt;</span><span class=
  "c2">20130304093210</span><span class=
  "c0">&lt;/timestamp&gt;<br />
  &lt;fai_release&gt;</span><span class=
  "c2">plophos/4.1.0</span><span class=
  "c0">&lt;/fai_release&gt;<br />
  &lt;type&gt;</span><span class="c2">FAIscript</span><span class=
  "c0">&lt;/type&gt;<br />
  &lt;class&gt;</span><span class="c2">CLASSNAME</span><span class=
  "c0">&lt;/class&gt;</span></p>

  <p class="c3 c5"><span class="c0">&lt;tag&gt;</span><span class=
  "c2">345</span><span class="c0">&lt;/tag&gt;<br />
  &lt;state&gt;&lt;/state&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/answer1&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;answer2&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;timestamp&gt;</span><span class=
  "c2">20130304093210</span><span class=
  "c0">&lt;/timestamp&gt;<br />
  &lt;fai_release&gt;</span><span class=
  "c2">plophos/4.1.0</span><span class=
  "c0">&lt;/fai_release&gt;<br />
  &lt;type&gt;</span><span class=
  "c2">FAItemplate</span><span class="c0">&lt;/type&gt;<br />
  &lt;class&gt;</span><span class="c2">CLASSNAME</span><span class=
  "c0">&lt;/class&gt;</span></p>

  <p class="c3 c5"><span class="c0">&lt;tag&gt;</span><span class=
  "c2">934757</span><span class="c0">&lt;/tag&gt;<br />
  &lt;state&gt;&lt;/state&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/answer2&gt;</span></p>

  <p class="c3 c6"><span class="c0">...</span></p>

  <p class="c3 c6"><span class=
  "c0">&lt;answerN&gt;</span><span class=
  "c2">...</span><span class="c0">&lt;/answerN&gt;<br />
  &lt;session_id&gt;</span><span class="c2">1013</span><span class=
  "c0">&lt;/session_id&gt;</span></p>

  <p class="c3"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">The reply elements have the
  following meaning:</span></p>

  <p class="c3"><span class="c4">&lt;timestamp&gt;</span></p>

  <p class="c3 c6"><span>The time (local server time) when go-susi
  last checked this entry.</span></p>

  <p class="c3"><span class="c4">&lt;fai_release&gt;</span></p>

  <p class="c3 c6"><span>The release the answer belongs to, i.e.
  the release this class is available in. Only one release is
  listed per answer. If the query requested information for
  multiple releases that offer the same FAI class, each is listed
  in its own answer.</span></p>

  <p class="c3"><span class="c4">&lt;type&gt;</span></p>

  <p class="c3 c6"><span>The type of the class. Possible values
  are</span> <span class="c2">FAIhook, FAIpackageList,
  FAIpartitionTable, FAIprofile, FAIscript,
  FAItemplate</span><span class=
  "c7">&#160;</span><span>and</span><span class=
  "c7">&#160;</span><span class=
  "c2">FAIvariable</span><span>.<br />
  Only one type is listed per answer element, even if the query
  returns multiple types with the same class name.</span></p>

  <p class="c3"><span class="c4">&lt;class&gt;</span></p>

  <p class="c3 c6"><span>The name of the FAI class described in the
  answer.</span></p>

  <p class="c3"><span class="c4">&lt;tag&gt;</span><span class=
  "c7">&#160;(optional)</span></p>

  <p class="c3 c6"><span>The gosaUnitTag of the FAI class (if it
  has one). The reply may contain classes with different unit
  tags.</span></p>

  <p class="c3 c6"><span class="c4">Note:</span><span>&#160;This is
  a go-susi extension. gosa-si-server does not include</span>
  <span class="c4">&lt;tag&gt;</span><span>&#160;in its reply and
  does not support filtering by tag in the</span> <span class=
  "c4">&lt;phrase&gt;</span><span>&#160;element. gosa-si-server
  always reports all FAI classes regardless of their
  gosaUnitTag.</span></p>

  <p class="c3"><span class="c4">&lt;state&gt;</span> <span>The
  following values are possible:</span></p>

  <p class="c3 c6"><span class="c7">empty
  string:</span><span>&#160;This class has no special
  properties.</span></p>

  <p class="c3 c6"><span class=
  "c2">freeze:</span><span>&#160;modifications to this class via
  GOsa are not permitted.</span></p>

  <p class="c3 c6"><span class=
  "c2">branch:</span><span>&#160;deprecated. go-susi never reports
  this state.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">GOsa note:</span></p>

  <p class="c3 c6"><span>GOsa 2.7 presents all types of FAI class
  with the same name in one integrated entry. If at least one type
  has FAIstate</span> <span class="c2">freeze</span><span>, GOsa
  will present a lock icon with the entry. However the individual
  parts remain independent and if e.g. a</span> <span class=
  "c2">FAIhook</span><span>&#160;of name FOO has state freeze but
  a</span> <span class="c2">FAIscript</span><span>&#160;of name FOO
  doesn&#8217;t, then GOsa permits editing of the</span>
  <span class="c2">FAIscript</span><span>, even though it prevents
  editing of the hook.</span></p>
  <hr style="page-break-before:always;display:none;" />

  <h3 class="c3"><a name="h.k0ukjz6z8za5" id=
  "h.k0ukjz6z8za5"></a><span>gosa_query_packages_list</span></h3>

  <p class="c3"><span class="c4">Purpose:</span></p>

  <p class="c3 c6"><span>GOsa&#11020;Server. Query the Debian
  packages database.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">Example message:</span></p>

  <p class="c3"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c6"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">gosa_query_packages_list</span><span class=
  "c0">&lt;/header&gt;<br />
  &lt;target&gt;</span><span class="c2">GOSA</span><span class=
  "c0">&lt;/target&gt;<br />
  &lt;source&gt;</span><span class="c2">GOSA</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c6"><span class=
  "c0">&lt;select&gt;</span><span class=
  "c2">distribution</span><span class=
  "c0">&lt;/select&gt;</span></p>

  <p class="c3 c6"><span class=
  "c0">&lt;select&gt;</span><span class=
  "c2">package</span><span class="c0">&lt;/select&gt;</span></p>

  <p class="c3 c6"><span class=
  "c0">&lt;select&gt;</span><span class=
  "c2">version</span><span class="c0">&lt;/select&gt;</span></p>

  <p class="c3 c6"><span class=
  "c0">&lt;select&gt;</span><span class=
  "c2">section</span><span class="c0">&lt;/select&gt;</span></p>

  <p class="c3 c6"><span class=
  "c0">&lt;select&gt;</span><span class=
  "c2">description</span><span class=
  "c0">&lt;/select&gt;</span></p>

  <p class="c3 c6"><span class=
  "c0">&lt;select&gt;</span><span class=
  "c2">timestamp</span><span class="c0">&lt;/select&gt;</span></p>

  <p class="c3 c6"><span class=
  "c0">&lt;select&gt;</span><span class=
  "c2">template</span><span class="c0">&lt;/select&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;where&gt;</span></p>

  <p class="c3 c5"><span class="c0">&lt;clause&gt;</span></p>

  <p class="c10 c3"><span class="c0">&lt;phrase&gt;</span></p>

  <p class="c3 c14"><span class=
  "c0">&lt;distribution&gt;</span><span class=
  "c2">plophos</span><span class=
  "c0">&lt;/distribution&gt;</span></p>

  <p class="c10 c3"><span class="c0">&lt;/phrase&gt;</span></p>

  <p class="c3 c5"><span class="c0">&lt;/clause&gt;</span></p>

  <p class="c3 c5"><span class="c0">&lt;clause&gt;</span></p>

  <p class="c10 c3"><span class=
  "c0">&lt;connector&gt;</span><span class=
  "c2">OR</span><span class="c0">&lt;/connector&gt;</span></p>

  <p class="c10 c3"><span class="c0">&lt;phrase&gt;</span></p>

  <p class="c3 c14"><span class=
  "c0">&lt;operator&gt;</span><span class=
  "c2">like</span><span class="c0">&lt;/operator&gt;</span></p>

  <p class="c3 c14"><span class=
  "c0">&lt;package&gt;</span><span class=
  "c2">srv-customize-default-parent-servers</span><span class=
  "c0">&lt;/package&gt;</span></p>

  <p class="c10 c3"><span class="c0">&lt;/phrase&gt;</span></p>

  <p class="c10 c3"><span class="c0">&lt;phrase&gt;</span></p>

  <p class="c3 c14"><span class=
  "c0">&lt;operator&gt;</span><span class=
  "c2">like</span><span class="c0">&lt;/operator&gt;</span></p>

  <p class="c3 c14"><span class=
  "c0">&lt;package&gt;</span><span class=
  "c2">srv-reprepro-statt-debmirror</span><span class=
  "c0">&lt;/package&gt;</span></p>

  <p class="c10 c3"><span class="c0">&lt;/phrase&gt;</span></p>

  <p class="c3 c5"><span class="c0">&lt;/clause&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/where&gt;</span></p>

  <p class="c3"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">The message elements have the
  following meaning:</span></p>

  <p class="c3"><span class="c4">&lt;where&gt;</span> <span class=
  "c7">(exactly 1)</span><span>&#160;</span></p>

  <p class="c3 c6"><span>The query syntax is the same as for</span>
  <span class="c2">gosa_query_jobdb</span><span>. The available
  column names are</span> <span class=
  "c4">&lt;distribution&gt;</span><span>,</span> <span class=
  "c4">&lt;package&gt;</span><span>,</span> <span class=
  "c4">&lt;version&gt;</span><span>,</span> <span class=
  "c4">&lt;section&gt;, &lt;description&gt;</span><span>,</span>
  <span class="c4">&lt;timestamp&gt;</span><span>&#160;and</span>
  <span class="c4">&lt;template&gt;</span><span>. Their meanings
  are described below in the explanation of the reply
  elements.</span></p>

  <p class="c3"><span class=
  "c4">&lt;select&gt;</span><span>&#160;</span><span class="c7">(0
  or more)</span></p>

  <p class="c3 c6"><span>Each</span> <span class=
  "c4">&lt;select&gt;</span><span>&#160;element contains the name
  of a column that should be returned for each answer matching the
  query. If there is no</span> <span class=
  "c4">&lt;select&gt;</span><span>&#160;element, all columns are to
  be returned.</span></p>

  <p class="c3 c6"><span class="c4">Note:</span></p>

  <p class="c3 c5"><span>At this time go-susi ignores</span>
  <span class="c4">&lt;select&gt;</span><span>&#160;and will always
  return all columns.</span></p>

  <p class="c3 c8"></p>
  <hr style="page-break-before:always;display:none;" />

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">Example reply:</span></p>

  <p class="c3"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c6"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">query_packages_list</span><span class=
  "c0">&lt;/header&gt;<br />
  &lt;source&gt;</span><span class=
  "c2">172.16.2.143:20081</span><span class=
  "c0">&lt;/source&gt;<br />
  &lt;target&gt;</span><span class="c2">GOSA</span><span class=
  "c0">&lt;/target&gt;<br />
  &lt;answer1&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;timestamp&gt;</span><span class=
  "c2">20130317185123</span><span class=
  "c0">&lt;/timestamp&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;distribution&gt;</span><span class=
  "c2">plophos</span><span class=
  "c0">&lt;/distribution&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;package&gt;</span><span class=
  "c2">srv-customize-default-parent-servers</span><span class=
  "c0">&lt;/package&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;version&gt;</span><span class="c2">1.0</span><span class=
  "c0">&lt;/version&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;section&gt;</span><span class=
  "c2">updates/misc</span><span class=
  "c0">&lt;/section&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;description&gt;</span><span class=
  "c2">VWViZXIgZGViY29uZ...dlc2V0enQ=</span><span class=
  "c0">&lt;/description&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;template&gt;</span><span class=
  "c2">ClRlbXBsYXRlOi...wgdXNlCgo=</span><span class=
  "c0">&lt;/template&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/answer1&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;answer2&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;timestamp&gt;</span><span class=
  "c2">20130317185123</span><span class=
  "c0">&lt;/timestamp&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;distribution&gt;</span><span class=
  "c2">plophos</span><span class=
  "c0">&lt;/distribution&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;package&gt;</span><span class=
  "c2">srv-reprepro-statt-debmirror</span><span class=
  "c0">&lt;/package&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;version&gt;</span><span class="c2">1.6</span><span class=
  "c0">&lt;/version&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;section&gt;</span><span class=
  "c2">updates/misc</span><span class=
  "c0">&lt;/section&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;description&gt;</span><span class=
  "c2">QWVuZGVyd...bmRldCB3aXJkLg==</span><span class=
  "c0">&lt;/description&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160; &#160;
  &lt;template&gt;&lt;/template&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/answer2&gt;</span></p>

  <p class="c3 c6"><span class="c0">...</span></p>

  <p class="c3 c6"><span class=
  "c0">&lt;answerN&gt;</span><span class=
  "c2">...</span><span class="c0">&lt;/answerN&gt;<br />
  &lt;session_id&gt;</span><span class="c2">1013</span><span class=
  "c0">&lt;/session_id&gt;</span></p>

  <p class="c3"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">The reply elements have the
  following meaning:</span></p>

  <p class="c3"><span class="c4">&lt;timestamp&gt;</span><span>The
  time (local server time) when go-susi last updated the packages
  database.</span></p>

  <p class="c3"><span class="c4">&lt;distribution&gt;</span></p>

  <p class="c3 c6"><span>The release the answer belongs to, i.e.
  the release the package is available in. Only one release is
  listed per answer. If the query requested information for
  multiple releases that include the same package, each is listed
  in its own answer.</span></p>

  <p class="c3"><span class=
  "c4">&lt;package&gt;</span><span>&#160;The name of the package
  described by the</span> <span class=
  "c4">&lt;answerX&gt;</span><span>&#160;element.</span></p>

  <p class="c3"><span class="c4">&lt;version&gt;</span></p>

  <p class="c3 c6"><span>&#160;The version of the package. A
  package may exist in multiple versions even within the same
  distribution. In that case each version will have its own</span>
  <span class=
  "c4">&lt;answerX&gt;</span><span>&#160;element.</span></p>

  <p class="c3"><span class="c4">&lt;section&gt;</span><span>Guess
  what.</span></p>

  <p class="c3"><span class="c4">&lt;description&gt;</span></p>

  <p class="c3 c6"><span>The base64 encoding of the short
  description of the package, i.e. the text from the Debian</span>
  <span class="c2">control</span><span>&#160;file that starts
  after</span> <span class=
  "c2">"Description:"</span><span>&#160;and extends to the end of
  the line. Neither</span> <span class=
  "c2">"Description:"</span><span>&#160;nor the newline at the end
  of the line are included in the</span> <span class=
  "c4">&lt;description&gt;</span><span>&#160;element.</span></p>

  <p class="c3"><span class="c4">&lt;template&gt;</span></p>

  <p class="c3 c6"><span>If the Debian package has a</span>
  <span class="c2">templates</span><span>&#160;file describing
  debconf-parameters, the</span> <span class=
  "c4">&lt;template&gt;</span><span>&#160;element contains this
  file in its entirety encoded in base64.</span></p>

  <p class="c3"><span class="c4">gosa-si-server note:</span></p>

  <p class="c3 c6"><span>As always gosa-si-server insert spurious
  whitespace into the base64 encodings.</span></p>
  <hr style="page-break-before:always;display:none;" />

  <h3 class="c3"><a name="h.3ws61p27du89" id=
  "h.3ws61p27du89"></a><span>gosa_get_available_kernel</span></h3>

  <p class="c3"><span class="c4">Purpose:</span></p>

  <p class="c3 c6"><span>GOsa&#11020;Server. Return a list of all
  available kernels for a certain release.</span></p>

  <p class="c3 c6"><span>go-susi generates this list from the
  output of an external program specified by the configuration
  option</span> <span class=
  "c2">kernel-list-hook.</span><span>&#160;The default is</span>
  <span class=
  "c2">/usr/lib/go-susi/generate_kernel_list.</span></p>

  <p class="c1"></p>

  <p class="c3"><span class="c4">Example message:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">gosa_get_available_kernel</span><span class=
  "c0">&lt;/header&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">GOSA</span><span class="c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">GOSA</span><span class="c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;fai_release&gt;</span><span class=
  "c2">plophos/4.1.0</span><span class=
  "c0">&lt;/fai_release&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">Example reply:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">get_available_kernel</span><span class=
  "c0">&lt;/header&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">172.16.2.143:20081</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">GOSA</span><span class="c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;session_id&gt;</span><span class=
  "c2">899</span><span class="c0">&lt;/session_id&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;get_available_kernel&gt;&lt;/get_available_kernel&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;answer1&gt;</span><span class=
  "c2">vmlinuz-2.6.32-44-generic</span><span class=
  "c0">&lt;/answer1&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;answer2&gt;</span><span class=
  "c2">vmlinuz-3.2.0-24-generic</span><span class=
  "c0">&lt;/answer2&gt;</span></p>

  <p class="c3 c5"><span class="c0">&#160;...</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;answerN&gt;</span><span class=
  "c2">default</span><span class="c0">&lt;/answerN&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>
  <hr style="page-break-before:always;display:none;" />

  <h3 class="c3 c20"><a name="h.28xo9vfahju" id=
  "h.28xo9vfahju"></a></h3>

  <h3 class="c3"><a name="h.n4mrnc8f9h1c" id=
  "h.n4mrnc8f9h1c"></a><span>gosa_show_log_by_mac</span></h3>

  <p class="c3"><span class="c4">Purpose:</span></p>

  <p class="c3 c6"><span>GOsa&#11020;Server. Returns all
  subdirectories of log files within the log file directory of the
  machine selected by the</span> <span class=
  "c4">&lt;mac&gt;</span><span>&#160;element. The MAC address is
  case-insensitive.</span></p>

  <p class="c1"></p>

  <p class="c3"><span class="c4">Example message (encrypted with
  [GOsaPackages] key):</span></p>

  <p class="c3"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3"><span class="c0">&#160;
  &lt;header&gt;</span><span class=
  "c2">gosa_show_log_by_mac</span><span class=
  "c0">&lt;/header&gt;</span></p>

  <p class="c3"><span class="c0">&#160;
  &lt;target&gt;</span><span class="c2">GOSA</span><span class=
  "c0">&lt;/target&gt;</span></p>

  <p class="c3"><span class="c0">&#160;
  &lt;source&gt;</span><span class="c2">GOSA</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3"><span class="c0">&#160;
  &lt;mac&gt;</span><span class=
  "c2">00:16:36:7c:db:3f</span><span class=
  "c0">&lt;/mac&gt;</span></p>

  <p class="c3"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">Example reply:</span></p>

  <p class="c3"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c6"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">show_log_by_mac</span><span class=
  "c0">&lt;/header&gt;</span></p>

  <p class="c3 c6"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">172.16.2.143:20081</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c6"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">GOSA</span><span class="c0">&lt;/target&gt;</span></p>

  <p class="c3 c6"><span class=
  "c0">&lt;mac_00_16_36_7c_db_3f&gt;</span><span class=
  "c2">install_20130304_112529</span><span class=
  "c0">&lt;/mac_00_16_36_7c_db_3f&gt;</span></p>

  <p class="c3 c6"><span class=
  "c0">&lt;mac_00_16_36_7c_db_3f&gt;</span><span class=
  "c2">softupdate_20130207_155242</span><span class=
  "c0">&lt;/mac_00_16_36_7c_db_3f&gt;</span></p>

  <p class="c3 c6"><span class="c0">...</span></p>

  <p class="c3 c6"><span class=
  "c0">&lt;show_log_by_mac&gt;&lt;/show_log_by_mac&gt;</span></p>

  <p class="c3 c6"><span class=
  "c0">&lt;session_id&gt;</span><span class=
  "c2">260</span><span class="c0">&lt;/session_id&gt;</span></p>

  <p class="c3"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">The reply elements have the
  following meaning:</span></p>

  <p class="c3"><span class="c4">&lt;mac_...&gt;</span></p>

  <p class="c3 c6"><span>This element corresponds to the</span>
  <span class="c4">&lt;mac&gt;</span><span>&#160;element in the
  request, but is always lowercase, even if the MAC address
  in</span> <span class="c4">&lt;mac&gt;</span><span>&#160;was
  not.</span></p>

  <p class="c3 c6"><span>For each subdirectory in the
  system&#8217;s log directory there is one element.</span></p>

  <p class="c3 c6"><span>If no log files are available, the answer
  will not contain any</span> <span class=
  "c4">&lt;mac...&gt;</span><span>&#160;elements.</span></p>
  <hr style="page-break-before:always;display:none;" />

  <p class="c1"></p>

  <h3 class="c3"><a name="h.mgjs4al2n8iv" id=
  "h.mgjs4al2n8iv"></a><span>gosa_show_log_files_by_date_and_mac</span></h3>

  <p class="c3"><span class="c4">Purpose:</span></p>

  <p class="c3 c6"><span>GOsa&#11020;Server. Get the list of log
  files contained in a specific subdirectory of a machine&#8217;s
  log file directory.</span></p>

  <p class="c1"></p>

  <p class="c3"><span class="c4">Example message:</span></p>

  <p class="c3"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c6"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">gosa_show_log_files_by_date_and_mac</span><span class=
  "c0">&lt;/header&gt;<br />
  &lt;target&gt;</span><span class="c2">GOSA</span><span class=
  "c0">&lt;/target&gt;<br />
  &lt;source&gt;</span><span class="c2">GOSA</span><span class=
  "c0">&lt;/source&gt;<br />
  &lt;date&gt;</span><span class=
  "c2">softupdate_20130207_151808</span><span class=
  "c0">&lt;/date&gt;<br />
  &lt;mac&gt;</span><span class=
  "c2">00:0c:29:50:a3:52</span><span class=
  "c0">&lt;/mac&gt;</span></p>

  <p class="c3"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">The message elements have the
  following meaning:</span></p>

  <p class="c3"><span class="c4">&lt;mac&gt;</span><span>&#160;The
  MAC address (case-insensitive) of the machine for which to list
  log files.</span></p>

  <p class="c3"><span class="c4">&lt;date&gt;</span><span>&#160;The
  subdirectory name within the machine&#8217;s log file
  directory.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">Example
  reply:</span><span><br /></span><span class=
  "c0">&lt;xml&gt;</span></p>

  <p class="c3 c6"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">show_log_files_by_date_and_mac</span><span class=
  "c0">&lt;/header&gt;</span></p>

  <p class="c3 c6"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">172.16.2.143:20081</span><span class=
  "c0">&lt;/source&gt;<br />
  &lt;target&gt;</span><span class="c2">GOSA</span><span class=
  "c0">&lt;/target&gt;<br />
  &lt;show_log_files_by_date_and_mac&gt;</span></p>

  <p class="c3 c6"><span class="c2">&#160; ldap2fai.log</span></p>

  <p class="c3 c6"><span class=
  "c0">&lt;/show_log_files_by_date_and_mac&gt;</span></p>

  <p class="c3 c6"><span class="c0">&#160;</span> <span class=
  "c2">...</span><span class="c0"><br />
  &lt;show_log_files_by_date_and_mac&gt;<br /></span><span class=
  "c2">&#160; shell.log</span></p>

  <p class="c3 c6"><span class=
  "c0">&lt;/show_log_files_by_date_and_mac&gt;<br />
  &lt;session_id&gt;</span><span class="c2">1405</span><span class=
  "c0">&lt;/session_id&gt;</span></p>

  <p class="c3 c6"><span class=
  "c0">&lt;show_log_files_by_date_and_mac&gt;&lt;/show_log_files_by_date_and_mac&gt;</span></p>

  <p class="c3"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">The reply elements have the
  following meaning:</span></p>

  <p class="c3"><span class=
  "c4">&lt;show_log_files_by_date_and_mac&gt;</span></p>

  <p class="c3 c6"><span>Each of these elements contains the name
  of one of the log files present in the requested
  subdirectory.</span></p>

  <p class="c3 c6"><span class="c4">Note:</span></p>

  <p class="c3 c5"><span>One of the returned</span> <span class=
  "c4">&lt;show_log_files_by_date_and_mac&gt;</span><span>&#160;is
  always empty.</span></p>
  <hr style="page-break-before:always;display:none;" />

  <p class="c3 c8"></p>

  <h3 class="c3"><a name="h.87z05qg5bmin" id=
  "h.87z05qg5bmin"></a><span>gosa_get_log_file_by_date_and_mac</span></h3>

  <p class="c3"><span class="c4">Purpose:</span></p>

  <p class="c3 c6"><span>GOsa&#11020;Server. Get the contents of a
  specific log file.</span></p>

  <p class="c1"></p>

  <p class="c3"><span class="c4">Example message:</span></p>

  <p class="c3"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c6"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">gosa_get_log_file_by_date_and_mac</span><span class=
  "c0">&lt;/header&gt;</span></p>

  <p class="c3 c6"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">GOSA</span><span class="c0">&lt;/target&gt;</span></p>

  <p class="c3 c6"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">GOSA</span><span class="c0">&lt;/source&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;date&gt;</span><span class=
  "c2">install_20130204_152626</span><span class=
  "c0">&lt;/date&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;mac&gt;</span><span class=
  "c2">00:0c:29:50:a3:52</span><span class=
  "c0">&lt;/mac&gt;</span></p>

  <p class="c3 c6"><span class=
  "c0">&lt;log_file&gt;</span><span class=
  "c2">foo.log</span><span class="c0">&lt;/log_file&gt;</span></p>

  <p class="c3"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">The message elements have the
  following meaning:</span></p>

  <p class="c3"><span class="c4">&lt;mac&gt;</span><span>&#160;The
  MAC address (case-insensitive) of the machine for which to read a
  log file.</span></p>

  <p class="c3"><span class="c4">&lt;date&gt;</span><span>&#160;The
  subdirectory name within the machine&#8217;s log file directory
  where the log file is found.</span></p>

  <p class="c3"><span class=
  "c4">&lt;log_file&gt;</span><span>&#160;The name of the log file
  to return.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">Example reply:</span></p>

  <p class="c3"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c6"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">get_log_file_by_date_and_mac</span><span class=
  "c0">&lt;/header&gt;</span></p>

  <p class="c3 c6"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">172.16.2.143:20081</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c6"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">GOSA</span><span class="c0">&lt;/target&gt;</span></p>

  <p class="c3 c6"><span class=
  "c0">&lt;foo.log&gt;</span><span class=
  "c2">VXBkY....i4uCg==</span><span class=
  "c0">&lt;/foo.log&gt;</span></p>

  <p class="c3 c6"><span class=
  "c0">&lt;get_log_file_by_date_and_mac&gt;&lt;/get_log_file_by_date_and_mac&gt;</span></p>

  <p class="c3 c6"><span class=
  "c0">&lt;session_id&gt;</span><span class=
  "c2">843</span><span class="c0">&lt;/session_id&gt;</span></p>

  <p class="c3"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">The reply elements have the
  following meaning:</span></p>

  <p class="c3"><span class="c4">&lt;foo.log&gt;</span></p>

  <p class="c3 c6"><span>The name of the element corresponds to the
  contents of the</span> <span class=
  "c4">&lt;log_file&gt;</span><span>&#160;element in the request.
  The contents are the base64-encoded file contents.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">GOsa note:</span></p>

  <p class="c3 c6"><span>When the tab &#8220;installation
  logs&#8221; for a specific machine is accessed for the first
  time, no log file is selected and GOsa creates an incorrect
  request where</span> <span class=
  "c4">&lt;log_file&gt;</span><span>&#160;has the value
  &#8220;0&#8221;. gosa-si-server answers this invalid request with
  a likewise broken reply.</span></p>
  <hr style="page-break-before:always;display:none;" />

  <p class="c3 c8"></p><a href="#" name="id.5uju4li1h33b" id=
  "id.5uju4li1h33b"></a>

  <h2 class="c3"><a name="h.mehsqejmttjq" id=
  "h.mehsqejmttjq"></a><span>Miscellaneous</span></h2>

  <p class="c3"><span>The messages in this section do not fit
  nicely in any of the other categories.</span></p>

  <h3 class="c3"><a name="h.sp869tnshz6d" id=
  "h.sp869tnshz6d"></a><span>panic</span></h3>

  <p class="c3"><span class="c4">Purpose:</span></p>

  <p class="c3 c6"><span>Admin&#10132;Server. Causes go-susi to
  abort with a full stack trace of all running goroutines. This
  function is go-susi specific and useful only for
  debugging.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">Example message:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">panic</span><span class="c0">&lt;/header&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <h3 class="c3"><a name="h.g4sj4mac6l55" id=
  "h.g4sj4mac6l55"></a><span>sistats</span></h3>

  <p class="c3"><span class="c4">Purpose:</span></p>

  <p class="c3 c6"><span>Admin&#10132;Server. Query various
  statistics about go-susi's operation. This function is go-susi
  specific.</span></p>

  <p class="c1"></p>

  <p class="c3"><span class="c4">Example message:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">sistats</span><span class="c0">&lt;/header&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c1"></p>

  <p class="c3"><span class="c4">Example reply:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">answer</span><span class="c0">&lt;/header&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">10.10.10.8:20081</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">GOSA</span><span class="c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class="c0">&lt;answer1&gt;</span></p>

  <p class="c10 c3"><span class="c0">&#160; &#160;
  &lt;Alloc&gt;</span><span class="c2">788080</span><span class=
  "c0">&lt;/Alloc&gt;</span></p>

  <p class="c10 c3"><span class="c0">&#160; &#160;
  &lt;Architecture&gt;</span><span class=
  "c2">386</span><span class="c0">&lt;/Architecture&gt;</span></p>

  <p class="c10 c3"><span class="c0">&#160; &#160;
  &lt;BuckHashSys&gt;</span><span class="c2">0</span><span class=
  "c0">&lt;/BuckHashSys&gt;</span></p>

  <p class="c10 c3"><span class="c0">&#160; &#160;
  &lt;Compiler&gt;</span><span class="c2">gc</span><span class=
  "c0">&lt;/Compiler&gt;</span></p>

  <p class="c10 c3"><span class="c0">&#160; &#160;
  &lt;DebugGC&gt;</span><span class="c2">false</span><span class=
  "c0">&lt;/DebugGC&gt;</span></p>

  <p class="c10 c3"><span class="c0">&#160; &#160;
  &lt;EnableGC&gt;</span><span class="c2">true</span><span class=
  "c0">&lt;/EnableGC&gt;</span></p>

  <p class="c10 c3"><span class="c0">&#160; &#160;
  &lt;Frees&gt;</span><span class="c2">337</span><span class=
  "c0">&lt;/Frees&gt;</span></p>

  <p class="c3 c10"><span class="c0">&#160; &#160;
  &lt;Go-Version&gt;</span><span class=
  "c2">go1.0.2</span><span class=
  "c0">&lt;/Go-Version&gt;</span></p>

  <p class="c10 c3"><span class="c0">&#160; &#160;
  &lt;HeapAlloc&gt;</span><span class=
  "c2">788080</span><span class="c0">&lt;/HeapAlloc&gt;</span></p>

  <p class="c10 c3"><span class="c0">&#160; &#160;
  &lt;HeapIdle&gt;</span><span class="c2">36864</span><span class=
  "c0">&lt;/HeapIdle&gt;</span></p>

  <p class="c10 c3"><span class="c0">&#160; &#160;
  &lt;HeapInuse&gt;</span><span class=
  "c2">1011712</span><span class="c0">&lt;/HeapInuse&gt;</span></p>

  <p class="c10 c3"><span class="c0">&#160; &#160;
  &lt;HeapObjects&gt;</span><span class=
  "c2">2440</span><span class="c0">&lt;/HeapObjects&gt;</span></p>

  <p class="c10 c3"><span class="c0">&#160; &#160;
  &lt;HeapReleased&gt;</span><span class="c2">0</span><span class=
  "c0">&lt;/HeapReleased&gt;</span></p>

  <p class="c10 c3"><span class="c0">&#160; &#160;
  &lt;HeapSys&gt;</span><span class="c2">1048576</span><span class=
  "c0">&lt;/HeapSys&gt;</span></p>

  <p class="c10 c3"><span class="c0">&#160; &#160;
  &lt;LastGC&gt;</span><span class=
  "c2">1352903012604979000</span><span class=
  "c0">&lt;/LastGC&gt;</span></p>

  <p class="c10 c3"><span class="c0">&#160; &#160;
  &lt;Lookups&gt;</span><span class="c2">167</span><span class=
  "c0">&lt;/Lookups&gt;</span></p>

  <p class="c10 c3"><span class="c0">&#160; &#160;
  &lt;MCacheInuse&gt;</span><span class=
  "c2">10656</span><span class="c0">&lt;/MCacheInuse&gt;</span></p>

  <p class="c10 c3"><span class="c0">&#160; &#160;
  &lt;MCacheSys&gt;</span><span class=
  "c2">131072</span><span class="c0">&lt;/MCacheSys&gt;</span></p>

  <p class="c10 c3"><span class="c0">&#160; &#160;
  &lt;MSpanInuse&gt;</span><span class="c2">5044</span><span class=
  "c0">&lt;/MSpanInuse&gt;</span></p>

  <p class="c10 c3"><span class="c0">&#160; &#160;
  &lt;MSpanSys&gt;</span><span class="c2">131072</span><span class=
  "c0">&lt;/MSpanSys&gt;</span></p>

  <p class="c10 c3"><span class="c0">&#160; &#160;
  &lt;Mallocs&gt;</span><span class="c2">2777</span><span class=
  "c0">&lt;/Mallocs&gt;</span></p>

  <p class="c10 c3"><span class="c0">&#160; &#160;
  &lt;NextGC&gt;</span><span class="c2">967232</span><span class=
  "c0">&lt;/NextGC&gt;</span></p>

  <p class="c10 c3"><span class="c0">&#160; &#160;
  &lt;NumCPU&gt;</span><span class="c2">2</span><span class=
  "c0">&lt;/NumCPU&gt;</span></p>

  <p class="c10 c3"><span class="c0">&#160; &#160;
  &lt;NumGC&gt;</span><span class="c2">2</span><span class=
  "c0">&lt;/NumGC&gt;</span></p>

  <p class="c10 c3"><span class="c0">&#160; &#160;
  &lt;NumGoroutine&gt;</span><span class="c2">12</span><span class=
  "c0">&lt;/NumGoroutine&gt;</span></p>

  <p class="c10 c3"><span class="c0">&#160; &#160;
  &lt;OS&gt;</span><span class="c2">linux</span><span class=
  "c0">&lt;/OS&gt;</span></p>

  <p class="c10 c3"><span class="c0">&#160; &#160;
  &lt;PauseTotalNs&gt;</span><span class=
  "c2">1071000</span><span class=
  "c0">&lt;/PauseTotalNs&gt;</span></p>

  <p class="c10 c3"><span class="c0">&#160; &#160;
  &lt;Revision&gt;</span><span class=
  "c2">48f6d79cc053</span><span class=
  "c0">&lt;/Revision&gt;</span></p>

  <p class="c10 c3"><span class="c0">&#160; &#160;
  &lt;StackInuse&gt;</span><span class=
  "c2">49152</span><span class="c0">&lt;/StackInuse&gt;</span></p>

  <p class="c10 c3"><span class="c0">&#160; &#160;
  &lt;StackSys&gt;</span><span class="c2">655360</span><span class=
  "c0">&lt;/StackSys&gt;</span></p>

  <p class="c10 c3"><span class="c0">&#160; &#160;
  &lt;Sys&gt;</span><span class="c2">3145728</span><span class=
  "c0">&lt;/Sys&gt;</span></p>

  <p class="c10 c3"><span class="c0">&#160; &#160;
  &lt;TotalAlloc&gt;</span><span class=
  "c2">833976</span><span class="c0">&lt;/TotalAlloc&gt;</span></p>

  <p class="c10 c3"><span class="c0">&#160; &#160;
  &lt;Version&gt;</span><span class="c2">1.0.0</span><span class=
  "c0">&lt;/Version&gt;</span></p>

  <p class="c10 c3"><span class="c0">&#160; &#160;
  &lt;mallinfo_arena&gt;</span><span class=
  "c2">1048576</span><span class=
  "c0">&lt;/mallinfo_arena&gt;</span></p>

  <p class="c10 c3"><span class="c0">&#160; &#160;
  &lt;mallinfo_fordblks&gt;</span><span class=
  "c2">1033272</span><span class=
  "c0">&lt;/mallinfo_fordblks&gt;</span></p>

  <p class="c10 c3"><span class="c0">&#160; &#160;
  &lt;mallinfo_hblkhd&gt;</span><span class=
  "c2">0</span><span class="c0">&lt;/mallinfo_hblkhd&gt;</span></p>

  <p class="c10 c3"><span class="c0">&#160; &#160;
  &lt;mallinfo_hblks&gt;</span><span class=
  "c2">0</span><span class="c0">&lt;/mallinfo_hblks&gt;</span></p>

  <p class="c10 c3"><span class="c0">&#160; &#160;
  &lt;mallinfo_keepcost&gt;</span><span class=
  "c2">1029872</span><span class=
  "c0">&lt;/mallinfo_keepcost&gt;</span></p>

  <p class="c10 c3"><span class="c0">&#160; &#160;
  &lt;mallinfo_ordblks&gt;</span><span class=
  "c2">16</span><span class=
  "c0">&lt;/mallinfo_ordblks&gt;</span></p>

  <p class="c10 c3"><span class="c0">&#160; &#160;
  &lt;mallinfo_uordblks&gt;</span><span class=
  "c2">15304</span><span class=
  "c0">&lt;/mallinfo_uordblks&gt;</span></p>

  <p class="c3 c5"><span class="c0">&lt;/answer1&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c1"></p>

  <p class="c3"><span class="c4">The reply elements have the
  following meaning:</span></p>

  <p class="c3 c6"><span>The reply elements are subject to change.
  They are purely for testing and debugging. Most of them are
  either self-explanatory or correspond directly to values from the
  Go runtime (</span><span class="c11"><a class="c9" href=
  "http://golang.org/pkg/runtime/">http://golang.org/pkg/runtime/</a></span><span>).</span></p>

  <p class="c3"><span class="c4">&lt;Version&gt;</span></p>

  <p class="c3 c6"><span>The go-susi version. The first number is
  the major version (which corresponds to the most recent
  milestone). The second number is the minor version. Minor version
  increases signal new features. The 3rd number starts at 0 with
  every new minor release and signals minor changes, bugfixes and
  unfinished or experimental features. If the 3rd number is 90 or
  greater, the version is considered "experimental". At the very
  least such a version is inadequately tested (e.g. some unit tests
  may be missing) but it is also possible that such a version does
  not work at all.</span></p>

  <p class="c3"><span class=
  "c4">&lt;SusiPeersUp&gt;</span><span>/</span><span class=
  "c4">&lt;SusiPeersDown&gt;</span></p>

  <p class="c3 c6"><span>Number of working (Up) and non-working
  (Down) peers known to support the go-susi protocol.</span></p>

  <p class="c3"><span class=
  "c4">&lt;NonSusiPeersUp&gt;</span><span>/</span><span class=
  "c4">&lt;NonSusiPeersDown&gt;</span></p>

  <p class="c3 c6"><span>Number of working (Up) and non-working
  (Down) peers that do not use the go-susi protocol.</span></p>

  <p class="c3"><span class="c4">&lt;KnownClients&gt;</span></p>

  <p class="c3 c6"><span>Number of clients the server is aware of,
  including those registered at peers.</span></p>

  <p class="c3"><span class="c4">&lt;MyClientsUp&gt;</span></p>

  <p class="c3 c6"><span>Number of clients registered at this
  server and currently reachable.</span></p>

  <p class="c3"><span class="c4">&lt;MyClientsDown&gt;</span></p>

  <p class="c3 c6"><span>Number of clients registered at this
  server and currently unreachable (probably off).</span></p>

  <p class="c3"><span class=
  "c4">&lt;TotalRegistrations&gt;</span></p>

  <p class="c3 c6"><span>Total number of</span> <span class=
  "c2">here_i_am</span><span>&#160;messages received.</span></p>

  <p class="c3"><span class=
  "c4">&lt;MissedRegistrations&gt;</span></p>

  <p class="c3 c6"><span>Number of</span> <span class=
  "c2">here_i_am</span><span>&#160;messages to which go-susi did
  not manage to reply in less than 8s.</span></p>

  <p class="c3"><span class="c4">&lt;AvgRequestTime&gt;</span></p>

  <p class="c3 c6"><span>Time in nanoseconds go-susi took to
  process requests averaged over the last 100. The time for reading
  the request from the network and writing the reply is not
  included.</span></p>

  <p class="c3"><span class="c4">&lt;mallinfo_arena&gt;</span></p>

  <p class="c3 c6"><span>The number of non-mmap'ed bytes currently
  reserved by malloc-based memory management. This includes memory
  that has already been free()d but not returned to the OS,
  yet.</span></p>

  <p class="c3 c6"><span class="c4">Note:</span> <span>malloc-based
  memory is not managed by the Go runtime and will not be garbage
  collected.</span></p>

  <p class="c3"><span class=
  "c4">&lt;mallinfo_fordblks&gt;</span></p>

  <p class="c3 c6"><span>The number of bytes within</span>
  <span class="c4">&lt;mallinfo_arena&gt;</span><span>&#160;that
  have been free()d. These bytes have not been returned to the OS
  (i.e. they're reported as in-use in the output of top and ps)
  even though they are not actually used by the program. The memory
  management keeps these bytes reserved either because of memory
  fragmentation or to improve performance.</span></p>

  <p class="c3 c6"><span class=
  "c4">Note:</span><span>&#160;If</span> <span class=
  "c4">&lt;mallinfo_arena&gt;</span><span>&#160;and</span>
  <span class="c4">&lt;mallinfo_fordblks&gt;</span> <span>keep
  growing together over the lifetime of the program &#160;this
  means that the program has problems with memory fragmentation.
  It's unlikely you'll ever see this.</span></p>

  <p class="c3 c6"><span>If the difference</span> <span class=
  "c4">&lt;mallinfo_arena&gt;</span><span>&#160;</span><span class=
  "c4">- &lt;mallinfo_fordblks&gt;</span><span>&#160;keeps growing
  over the lifetime of the program this means that the program has
  a memory leak. Report this as a bug.</span></p>

  <p class="c3"><span class="c4">&lt;mallinfo_hblkhd&gt;</span></p>

  <p class="c3 c6"><span>Number of bytes allocated by malloc-based
  memory management using mmap(). This kind of memory,
  unlike</span> <span class=
  "c4">&lt;mallinfo_arena&gt;</span><span>&#160;is always returned
  to the OS immediatly when free()d, so all of these bytes are
  actually in use by the program.</span></p>

  <p class="c3 c6"><span class="c4">Note:</span> <span>If this
  number keeps growing over the lifetime of the program this means
  that the program has a memory leak. Report this as a
  bug.</span></p>

  <p class="c3"><span class=
  "c4">&lt;mallinfo_keepcost&gt;</span></p>

  <p class="c3 c6"><span>Number of bytes in</span> <span class=
  "c4">&lt;mallinfo_arena&gt;</span><span>&#160;that could be
  returned to the OS but are kept to make future allocations
  faster.</span></p>

  <p class="c3 c6"><span class="c4">Note:</span><span>&#160;This
  number should always be close to</span> <span class=
  "c4">&lt;mallinfo_fordblks&gt;</span><span>. If there's a large
  difference between the two it means there's an issue with memory
  fragmentation.</span></p>

  <p class="c3"><span class="c4">&lt;mallinfo_hblks&gt;</span></p>

  <p class="c3 c6"><span>The number of mmap'ed blocks that hold the
  memory reported as</span> <span class=
  "c4">&lt;mallinfo_hblkhd&gt;</span><span>.</span></p>

  <p class="c3 c6"><span class="c4">Note:</span> <span>This number
  should be fairly constant and small over the lifetime of the
  program. If it keeps growing this means the program has a memory
  leak. Report this as a bug.</span></p>
  <hr style="page-break-before:always;display:none;" />

  <p class="c3 c8"></p>

  <h3 class="c3"><a name="h.4syp8tvmprfx" id=
  "h.4syp8tvmprfx"></a><span>gosa_trigger_reload_ldap_config</span></h3>

  <p class="c3"><span class="c4">Purpose:</span></p>

  <p class="c3 c6"><span>GOsa&#10132;Server. Write informations
  about a changed system from Gosa to your LDAP
  configuration.</span></p>

  <p class="c1"></p>

  <p class="c3"><span class="c4">Example message:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">gosa_trigger_reload_ldap_config</span><span class=
  "c0">&lt;/header&gt;<br />
  &lt;source&gt;</span><span class="c2">GOSA</span><span class=
  "c0">&lt;/source&gt;<br />
  &lt;target&gt;</span><span class=
  "c2">00:16:36:7c:db:3f</span><span class=
  "c0">&lt;/target&gt;<br />
  &lt;macaddress&gt;</span><span class=
  "c2">00:16:36:7c:db:3f</span><span class=
  "c0">&lt;/macaddress&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>
  <hr style="page-break-before:always;display:none;" />
  <a href="#" name="id.ys29afdlp9ml" id="id.ys29afdlp9ml"></a>

  <h2 class="c3"><a name="h.fn2pc4k1bcbp" id=
  "h.fn2pc4k1bcbp"></a><span>Deprecated</span></h2>

  <p class="c3"><span>The messages in this section are concerned
  with user presence tracking and delivering messages to individual
  users. Like the homegrown encryption protocol this message
  delivery service is badly designed and go-susi does not support
  it. The</span> <span class=
  "c2">[general]/send-user-msg</span><span>&#160;hook can be used
  to interface go-susi with an external messaging service such as
  Jabber or email.</span></p>

  <h3 class="c3"><a name="h.itw5nv66zjdc" id=
  "h.itw5nv66zjdc"></a><span>CLMSG_CURRENTLY_LOGGED_IN</span></h3>

  <p class="c3"><span class="c4">Purpose:</span></p>

  <p class="c3 c6"><span>Client&#10132;Server. After the client has
  registered at the server it will send this message to tell the
  server the login names of all users currently logged in
  (including ssh logins). This corresponds to the users listed by
  the</span> <span class=
  "c2">who</span><span>&#160;command.</span></p>

  <p class="c3 c6"><span>Updates to the list of logged in users are
  transmitted via</span> <span class=
  "c2">CLMSG_LOGOUT</span><span>&#160;and</span> <span class=
  "c2">CLMSG_LOGIN</span><span>&#160;messages.</span></p>

  <p class="c3 c6"><span>When the server receives this message, it
  sends an</span> <span class=
  "c2">information_sharing</span><span>&#160;message with</span>
  <span class="c4">&lt;user_db&gt;</span><span>&#160;elements to
  all peers.</span></p>

  <p class="c1"></p>

  <p class="c3"><span class="c4">Example message:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">CLMSG_CURRENTLY_LOGGED_IN</span><span class=
  "c0">&lt;/header&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">172.16.2.146:20083</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">172.16.2.85:20081</span><span class=
  "c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;CLMSG_CURRENTLY_LOGGED_IN&gt;</span></p>

  <p class="c3 c5"><span class="c2">&#160; &#160;felix.wolga
  serkan.soeldirim serkan.soeldirim</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;/CLMSG_CURRENTLY_LOGGED_IN&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;macaddress&gt;</span><span class=
  "c2">00:0c:29:50:a3:52</span><span class=
  "c0">&lt;/macaddress&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;timestamp&gt;</span><span class=
  "c2">20130305113331</span><span class=
  "c0">&lt;/timestamp&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">The message elements have the
  following meaning:</span></p>

  <p class="c3"><span class=
  "c0">&lt;CLMSG_CURRENTLY_LOGGED_IN&gt;</span></p>

  <p class="c3 c6"><span>a space-separated list of login names,
  including users with graphical as well as ssh sessions. The list
  may contain duplicate entries if a user has multiple simultaneous
  sessions.</span></p>

  <p class="c3"><span class="c0">&lt;timestamp&gt;</span></p>

  <p class="c3 c6"><span>The</span> <span class=
  "c4">UTC</span><span>&#160;time at which the message is being
  sent.</span></p>

  <p class="c3"><span class=
  "c0">&lt;macaddress&gt;</span><span>&#160;MAC address of the
  sending client.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">go-susi note:</span></p>

  <p class="c3 c6"><span>go-susi currently does not send</span>
  <span class=
  "c2">information_sharing</span><span>&#160;messages.</span></p>

  <p class="c3 c8"></p>
  <hr style="page-break-before:always;display:none;" />

  <p class="c3 c8"></p>

  <h3 class="c3"><a name="h.p7etfjet6df2" id=
  "h.p7etfjet6df2"></a><span>CLMSG_LOGIN</span></h3>

  <p class="c3"><span class="c4">Purpose:</span></p>

  <p class="c3 c6"><span>Client&#10132;Server. When a user opens a
  new session the client sends this message to the
  server.</span></p>

  <p class="c3 c6"><span>When the server receives this message, it
  sends an</span> <span class=
  "c2">information_sharing</span><span>&#160;message with</span>
  <span class="c4">&lt;new_user&gt;</span><span>&#160;elements to
  all peers.</span></p>

  <p class="c1"></p>

  <p class="c3"><span class="c4">Example message:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">CLMSG_LOGIN</span><span class=
  "c0">&lt;/header&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">172.16.2.146:20083</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">172.16.2.85:20081</span><span class=
  "c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;CLMSG_LOGIN&gt;</span><span class=
  "c2">felix.wolga</span><span class=
  "c0">&lt;/CLMSG_LOGIN&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;macaddress&gt;</span><span class=
  "c2">00:0c:29:50:a3:52</span><span class=
  "c0">&lt;/macaddress&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;timestamp&gt;</span><span class=
  "c2">20130305113331</span><span class=
  "c0">&lt;/timestamp&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">The message elements have the
  following meaning:</span></p>

  <p class="c3"><span class="c0">&lt;CLMSG_LOGIN&gt;</span></p>

  <p class="c3 c6"><span>Login name of the user who has just opened
  a new session.</span></p>

  <p class="c3"><span class="c0">&lt;timestamp&gt;,
  &lt;macaddress&gt;</span><span>&#160;see</span><span class=
  "c2">&#160;CLMSG_CURRENTLY_LOGGED_IN.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">gosa-si-client note:</span></p>

  <p class="c3 c6"><span>gosa-si-client does not seem to notice new
  ssh sessions, even though existing ssh sessions are included in
  the list from</span> <span class=
  "c2">CLMSG_CURRENTLY_LOGGED_IN.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">go-susi note:</span></p>

  <p class="c3 c6"><span>go-susi currently does not send</span>
  <span class=
  "c2">information_sharing</span><span>&#160;messages.</span></p>
  <hr style="page-break-before:always;display:none;" />

  <p class="c3 c8"></p>

  <h3 class="c3"><a name="h.o8zsmxn55w4" id=
  "h.o8zsmxn55w4"></a><span>CLMSG_LOGOUT</span></h3>

  <p class="c3"><span class="c4">Purpose:</span></p>

  <p class="c3 c6"><span>Client&#10132;Server. When a user
  terminates a login session the client sends this message to the
  server.</span></p>

  <p class="c3 c6"><span>When the server receives this message, it
  does</span> <span class="c7">not</span><span>&#160;send an</span>
  <span class="c2">information_sharing</span><span>&#160;message to
  its peers.</span></p>

  <p class="c1"></p>

  <p class="c3"><span class="c4">Example message:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">CLMSG_LOGOUT</span><span class=
  "c0">&lt;/header&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">172.16.2.146:20083</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">172.16.2.85:20081</span><span class=
  "c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;CLMSG_LOGOUT&gt;</span><span class=
  "c2">felix.wolga</span><span class=
  "c0">&lt;/CLMSG_LOGOUT&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;macaddress&gt;</span><span class=
  "c2">00:0c:29:50:a3:52</span><span class=
  "c0">&lt;/macaddress&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;timestamp&gt;</span><span class=
  "c2">20130305113331</span><span class=
  "c0">&lt;/timestamp&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">The message elements have the
  following meaning:</span></p>

  <p class="c3"><span class="c0">&lt;CLMSG_LOGOUT&gt;</span></p>

  <p class="c3 c6"><span>Login name of the user who has just closed
  a session. Note that the same user may still have other sessions
  open.</span></p>

  <p class="c3"><span class="c0">&lt;timestamp&gt;,
  &lt;macaddress&gt;</span><span>&#160;see</span> <span class=
  "c2">CLMSG_CURRENTLY_LOGGED_IN.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">gosa-si-client note:</span></p>

  <p class="c3 c6"><span>gosa-si-client does not seem to notice
  when ssh sessions are terminated, even though existing ssh
  sessions are included in the list from</span> <span class=
  "c2">CLMSG_CURRENTLY_LOGGED_IN.</span></p>
  <hr style="page-break-before:always;display:none;" />

  <h3 class="c3"><a name="h.1nxkurs4dznc" id=
  "h.1nxkurs4dznc"></a><span>information_sharing</span></h3>

  <p class="c3"><span class="c4">Purpose:</span></p>

  <p class="c3 c6"><span>Server&#10132;Server. nforms the receiving
  server about users currently logged in at clients registered at
  the sending server. Whenever a client sends a</span> <span class=
  "c2">CLMSG_LOGIN</span><span>&#160;message to its server, that
  server sends</span> <span class=
  "c2">information_sharing</span><span>&#160;messages to its peers
  with</span> <span class=
  "c4">&lt;new_user&gt;</span><span>&#160;information.</span></p>

  <p class="c3 c6"><span>Whenever a client sends a</span>
  <span class=
  "c2">CLMSG_CURRENTLY_LOGGED_IN</span><span>&#160;message to its
  server, that server sends</span> <span class=
  "c2">information_sharing</span><span>&#160;messages to its peers
  with</span> <span class=
  "c4">&lt;user_db&gt;</span><span>&#160;information.</span></p>

  <p class="c3 c6"><span>When the client sends</span> <span class=
  "c2">CLMSG_LOGOUT</span><span>&#160;to its server, gosa-si-server
  does not seem to forward that information to its
  peers.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">Example messages:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">information_sharing</span><span class=
  "c0">&lt;/header&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">172.16.2.143:20081</span><span class=
  "c0">&lt;/source&gt;<br />
  &lt;target&gt;</span><span class=
  "c2">172.16.2.60:20081</span><span class=
  "c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;user_db&gt;</span><span class=
  "c2">172.16.2.88:20083;sharak.khun</span><span class=
  "c0">&lt;/user_db&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;user_db&gt;</span><span class=
  "c2">172.16.2.66:20083;thomas.fischmaul</span><span class=
  "c0">&lt;/user_db&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;user_db&gt;</span><span class=
  "c2">172.16.2.148:20083;thomas.fischmaul</span><span class=
  "c0">&lt;/user_db&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;information_sharing&gt;&lt;/information_sharing&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c3 c8"></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">information_sharing</span><span class=
  "c0">&lt;/header&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">172.16.2.143:20081</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">172.16.2.60:20081</span><span class=
  "c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;new_user&gt;</span><span class=
  "c2">172.16.2.148:20083;karl.klammer</span><span class=
  "c0">&lt;/new_user&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;information_sharing&gt;&lt;/information_sharing&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c3 c8"></p>

  <p class="c1"></p>

  <p class="c3"><span class="c4">The message elements have the
  following meaning:</span></p>

  <p class="c3"><span class="c4">&lt;user_db&gt;</span></p>

  <p class="c3 c6"><span>When a</span> <span class=
  "c4">&lt;user_db&gt;</span><span>&#160;element is present it
  means that the</span> <span class=
  "c2">information_sharing</span><span>&#160;message lists</span>
  <span class="c7">all</span><span>&#160;users currently logged in
  at clients registered at the</span> <span class=
  "c4">&lt;source&gt;</span><span>&#160;server. Each such user is
  listed in its own</span> <span class=
  "c4">&lt;user_db&gt;</span><span>&#160;element. The receiving
  server should discard all old user information from the</span>
  <span class="c4">&lt;source&gt;</span><span>&#160;server and
  replace it with the new information.</span></p>

  <p class="c3"><span class="c4">&lt;new_user&gt;</span></p>

  <p class="c3 c6"><span>The</span> <span class=
  "c4">&lt;new_user&gt;</span><span>&#160;element is like</span>
  <span class="c4">&lt;user_db&gt;</span><span>&#160;with the
  difference that the</span> <span class=
  "c2">information_sharing</span><span>&#160;message does not list
  all users. This means that the receiving server should add the
  new user information to the old information from</span>
  <span class="c4">&lt;source&gt;</span><span>&#160;rather than
  discard all old information as it would do in the case of</span>
  <span class="c4">&lt;user_db&gt;</span><span>.</span></p>

  <p class="c3 c8"></p>

  <p class="c3"><span class="c4">go-susi notes:</span></p>

  <p class="c3 c6"><span>Currently go-susi understands but does not
  send these messages.</span></p>
  <hr style="page-break-before:always;display:none;" />

  <h3 class="c3"><a name="h.le5ca3ebk6m4" id=
  "h.le5ca3ebk6m4"></a><span>usr_msg</span></h3>

  <p class="c3"><span class="c4">Purpose:</span></p>

  <p class="c3 c6"><span>Server&#10132;Client. Tell a client to
  present a popup message to the user.</span></p>

  <p class="c1"></p>

  <p class="c3"><span class="c4">Example message:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">usr_msg</span><span class="c0">&lt;/header&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">172.16.2.143:20081</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">172.16.2.146:20083</span><span class=
  "c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;message&gt;</span><span class=
  "c2">TmFjaHJpY2h0</span><span class=
  "c0">&lt;/message&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;subject&gt;</span><span class=
  "c2">QmV0cmVmZg==</span><span class=
  "c0">&lt;/subject&gt;</span></p>

  <p class="c3 c5"><span class="c0">&lt;usr&gt;</span><span class=
  "c2">userid</span><span class="c0">&lt;/usr&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;usr_msg&gt;&lt;/usr_msg&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <h3 class="c3"><a name="h.tjnsr0p4y1zm" id=
  "h.tjnsr0p4y1zm"></a><span>confirm_usr_msg</span></h3>

  <p class="c3"><span class="c4">Purpose:</span></p>

  <p class="c3 c6"><span>Client&#10132;Server. Tells the server
  that a message sent to the client via</span> <span class=
  "c2">usr_msg</span><span>&#160;has been presented to the
  user.</span></p>

  <p class="c1"></p>

  <p class="c3"><span class="c4">Example message:</span></p>

  <p class="c3 c6"><span class="c0">&lt;xml&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;header&gt;</span><span class=
  "c2">confirm_usr_msg</span><span class=
  "c0">&lt;/header&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;source&gt;</span><span class=
  "c2">172.16.2.146:20083</span><span class=
  "c0">&lt;/source&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;target&gt;</span><span class=
  "c2">172.16.2.143:20081</span><span class=
  "c0">&lt;/target&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;message&gt;</span><span class=
  "c2">TmFjaHJpY2h0</span><span class=
  "c0">&lt;/message&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;subject&gt;</span><span class=
  "c2">QmV0cmVmZg==</span><span class=
  "c0">&lt;/subject&gt;</span></p>

  <p class="c3 c5"><span class="c0">&lt;usr&gt;</span><span class=
  "c2">userid</span><span class="c0">&lt;/usr&gt;</span></p>

  <p class="c3 c5"><span class=
  "c0">&lt;confirm_usr_msg&gt;&lt;/confirm_usr_msg&gt;</span></p>

  <p class="c3 c6"><span class="c0">&lt;/xml&gt;</span></p>

  <p class="c1"></p>

  <p class="c3"><span class="c4">go-susi note:</span></p>

  <p class="c3 c6"><span>go-susi does not support this
  message.</span></p>
  <hr style="page-break-before:always;display:none;" />
  <a href="#" name="id.qm42onlc5h25" id="id.qm42onlc5h25"></a>

  <h1 class="c3"><a name="h.7g7l42ni6zqg" id=
  "h.7g7l42ni6zqg"></a><span>Appendix</span></h1><a href="#" name=
  "id.ejujf2q7dp37" id="id.ejujf2q7dp37"></a>

  <h2 class="c3"><a name="h.bumhouula4zt" id=
  "h.bumhouula4zt"></a><span>sibridge</span></h2>

  <p class="c3"><span>Remote control for an si-server.</span></p>

  <h3 class="c3"><a name="h.gieyvwnkib9d" id=
  "h.gieyvwnkib9d"></a><span>SYNOPSIS</span></h3>

  <p class="c3"><span class="c2">sibridge [args]
  [targetserver][:targetport]</span></p>

  <h3 class="c3"><a name="h.uveotml3h6xt" id=
  "h.uveotml3h6xt"></a><span>DESCRIPTION</span></h3>

  <p class="c3"><span>Remote control for an si-server at</span>
  <span class="c2">targetserver:targetport.</span></p>

  <h3 class="c3"><a name="h.n3hj3y4xe5mb" id=
  "h.n3hj3y4xe5mb"></a><span>OPTIONS</span></h3>

  <p class="c3"><span class="c0">--help</span></p>

  <p class="c3 c6"><span>print usage and exit.</span></p>

  <p class="c3"><span class="c0">--version</span></p>

  <p class="c3 c6"><span>print version and exit.</span></p>

  <p class="c3"><span class="c0">-c &lt;file&gt;</span></p>

  <p class="c3 c6"><span>read configuration from &lt;file&gt;
  instead of the default location.</span></p>

  <p class="c3"><span class="c0">-l</span></p>

  <p class="c3 c6"><span>listen for socket connections (from
  localhost only) on si-server port +10.</span></p>

  <p class="c3"><span class="c0">-e &lt;string&gt;</span></p>

  <p class="c3 c6"><span>execute commands from
  &lt;string&gt;.</span></p>

  <p class="c3"><span class="c0">-f &lt;file&gt;</span></p>

  <p class="c3 c6"><span>execute commands from &lt;file&gt;. If
  &lt;file&gt; is not an ordinary file, it will be processed
  concurrently with other special files and data from other -e and
  -f arguments. This permits using FIFOs and other special files
  for input.</span></p>

  <p class="c3"><span class="c0">-v</span></p>

  <p class="c3 c6"><span>log</span> <span>INFO level log messages
  (by default only ERRORs are logged). INFO level messages may aid
  the administrator in debugging problems.</span></p>

  <p class="c3"><span class="c0">-vv</span></p>

  <p class="c3 c6"><span>log INFO and DEBUG level log messages.
  DEBUG level messages are useful only for developers and may
  produce so much data that it affects performance. They also
  contain cleartext passwords.</span></p>
  <hr style="page-break-before:always;display:none;" />
  <a href="#" name="id.anooi87iwmip" id="id.anooi87iwmip"></a>

  <h2 class="c3"><a name="h.rg8r0lng3t2i" id=
  "h.rg8r0lng3t2i"></a><span>gosa-si-server</span></h2>

  <p class="c3"><span>The preferred way to launch
  go-susi</span></p>

  <h3 class="c3"><a name="h.yoxr0fkye4xl" id=
  "h.yoxr0fkye4xl"></a><span>SYNOPSIS</span></h3>

  <p class="c3"><span class="c2">gosa-si-server [-f] [-v] [-vvvvvv]
  [args for go-susi]</span></p>

  <h3 class="c3"><a name="h.2c667w8outoi" id=
  "h.2c667w8outoi"></a><span>DESCRIPTION</span></h3>

  <p class="c3"><span>gosa-si-server is the preferred way to launch
  go-susi. It offers the following benefits over launching go-susi
  directly:</span></p>

  <ol class="c19" start="1">
    <li class="c15 c3 c6"><span>command line arguments compatible
    with the original gosa-si-server</span></li>

    <li class="c15 c3 c6"><span>runs in the background as daemon
    (unless called with -f)</span></li>

    <li class="c15 c3 c6"><span>creates a PID file like the
    original gosa-si-server</span></li>

    <li class="c15 c3 c6"><span>enhanced compatibility with system
    services that expect gosa-si-server (such as init
    scripts)</span></li>

    <li class="c15 c3 c6"><span>sets up kernel parameters and
    limits for best go-susi operation</span></li>

    <li class="c15 c3 c6"><span>in case of a go-susi crash,
    /var/log/gosa-si-server-crash.log has additional information
    (such as backtraces) not found in the normal log.</span></li>
  </ol>

  <h3 class="c3"><a name="h.hynknf0noih" id=
  "h.hynknf0noih"></a><span>OPTIONS</span></h3>

  <p class="c3"><span class="c0">-v, -vv, -vvv, -vvvv,
  -vvvvv</span></p>

  <p class="c3 c6"><span>verbose, causes logging of INFO! level
  messages in addition to ERROR! and WARNING! Performance, disk and
  memory usage degrades slightly.</span></p>

  <p class="c3"><span class="c0">-vvvvvv...</span></p>

  <p class="c3 c6"><span>more verbose, causes logging of DEBUG!
  level messages in addition to INFO!, ERROR! and WARNING! These
  messages contain encryption keys.</span></p>

  <p class="c3 c6"><span>Performance, disk and memory usage
  degrades significantly. In an environment with a lot of clients,
  this option should not be used unattended because of the
  potential for memory or disk space exhaustion, as well as high
  CPU load.</span></p>

  <p class="c3"><span class="c0">-f</span></p>

  <p class="c3 c6"><span>run in foreground. By default
  gosa-si-server launches as a daemon. This switch suppresses this
  behaviour. It is useful for testing because log messages and
  crash information are printed to stdout and stderr. The crash
  monitor is not started in this case and</span> <span class=
  "c2">/var/log/gosa-si-server-crash.log</span><span>&#160;will not
  be written.</span></p>

  <h3 class="c3"><a name="h.rge71hew64ek" id=
  "h.rge71hew64ek"></a><span>FILES</span></h3>

  <p class="c3"><span class=
  "c0">/etc/gosa-si/server.conf</span></p>

  <p class="c3 c6"><span>the configuration file. The</span>
  <span class="c2">pid-file=...</span><span>&#160;directive
  determines the path of the PID file. &#160;</span></p>

  <p class="c3"><span class=
  "c0">/var/run/gosa-si-server.pid</span></p>

  <p class="c3 c6"><span>the default PID file path if the</span>
  <span class="c2">pid-file</span><span>&#160;directive is not used
  in server.conf</span></p>

  <p class="c3"><span class=
  "c0">/var/log/gosa-si-server-crash.log</span></p>

  <p class="c3 c6"><span>after a crash this log contains additional
  information not found in the normal log file.</span></p>
  <hr style="page-break-before:always;display:none;" />
  <a href="#" name="id.l8s0fislnev7" id="id.l8s0fislnev7"></a>

  <h1 class="c3"><a name="h.jjoyi1fwsh2p" id=
  "h.jjoyi1fwsh2p"></a><span>License</span></h1>

  <p class="c3"><span>This document is Copyright &#169; 2012,2013
  Matthias S. Benkmann and licensed under the CC-BY-SA-3.0 license
  as found at</span> <span class="c11"><a class="c9" href=
  "http://creativecommons.org/licenses/by-sa/3.0/deed.en_US">http://creativecommons.org/licenses/by-sa/3.0/deed.en_US</a></span><span>.</span></p>
</body>
</html>
